java - 将输入与 .txt 文件中的日期进行比较时出现问题

标签 java file date for-loop arraylist

我正在编写一个与“Transactions.txt”文件交互的程序,其格式如下。

TransactionNumber,ItemName,Quantity,Purchase/HireDate,ReturnDate

其内容为:

T01,Jumper,5,10/03/2015,14/03/2015
T02,Tuxedo,1,21/04/2015,23/05/2015
T03,Jacket,2,02/07/2015,09/07/2015
T04,Hat,3,12/09/2015,19/09/2015
T05,Shoes,4,09/11/2015,20/11/2015

该程序的目标是获取开始日期并检查文件中的所有日期,看看开始日期是否早于任何日期,如果是,则会添加项目名称、数量和购买/租用日期及其返回要打印字符串的日期。例如,如果我输入 10/03/2015 作为开始日期,则应打印所有内容,但只打印第 1、2 和 4 行,我不知道问题出在哪里。

我还尝试添加一段代码,该代码将获取结束日期,并检查文件中的任何日期是否在结束日期之后,如果是,则将打印输出,然后它应该完成执行 main (而不是 exit(0) ,因为我让它与其他类交互。因此,如果我输入 10/03/2015 作为开始日期,15/03/2015 作为结束日期,则只有第 1 行的内容将被打印。

我已经尝试解决这个问题几个小时了,但我找不到问题所在,非常感谢任何帮助。

import java.io.*;
import java.util.*;
import java.text.*;
public static File transactionsFile = new File("Transactions.txt");
public class Transaction
{
    public static void main() throws IOException
    {
        try
        {
            String details = "";
            Date tempDate;
            SimpleDateFormat SDF = new SimpleDateFormat("dd/mm/yyyy");
            System.out.print("Enter in a start date (dd/mm/yyyy): ");
            String sDate = userInput.nextLine();
            Date startDate = SDF.parse(sDate);
            System.out.print("Enter in an end date (dd/mm/yyyy): ");
            String eDate = userInput.nextLine();
            Date endDate = SDF.parse(eDate);
            List<String[]> contents = new ArrayList<>();
            Scanner searchTransactionsFile = new Scanner(transactionsFile);
            System.out.println("\n---------Summary of Transactions---------");

            while(searchTransactionsFile.hasNextLine())
            {
                String[] current = searchTransactionsFile.nextLine().split(",");
                contents.add(current);
            }

            for(String[] elements: contents)
            {
                tempDate = SDF.parse(elements[3]);
                if(tempDate.after(startDate) || tempDate.equals(startDate))
                    details += "\nItem Name:\t\t" + elements[1] + "\nQuantity:\t\t" + elements[2] + "\nHire/Purchase Date:\t" + elements[3] + "\nReturn Date:\t\t" + elements[4] + "\n";
            }
            System.out.print(details);
            searchTransactionsFile.close();
        }
        catch(Exception e)
        {
            System.out.println("Invalid date entered. Please enter a valid date in the format dd/mm/yyyy");
        }
    }
}

最佳答案

放置此行

public static File transactionsFile = new File("Transactions.txt");

在类定义中。 并且您必须定义 userInput 变量。像这样

Scanner userInput = new Scanner(System.in);

您还必须将日期的格式修改为:

SimpleDateFormat SDF = new SimpleDateFormat("dd/M/yyyy");

因为 mm 代表分钟,M 代表月份;

关于java - 将输入与 .txt 文件中的日期进行比较时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33723921/

相关文章:

python - 查找给定月份第一天的星期几

java - 为什么单个 "if"比 "switch"慢?

java - 无法正确映射静态资源

c - 使用单个文件指针打开多个文件

java - 如何将 JsonString 转换为 String?

javascript - 最近 12 个月的 Javascript

mysql - 显示 mysql 查询中缺失日期的计数

java - 从 Jar 运行我的 java 项目

java - 如何使用 Maven 创建具有依赖项的可执行/可运行 JAR?

java - 在 Java 中使用 GUI 将文件上传到 Oracle 数据库的好例子