将文件中的输入转换为 java 中的日期

Converting input from a file to a Date in java

我有一个文本文件,我正在从中导入数据,该文件是有关库中项目的信息。这些信息之一是借出物品的日期。我无法弄清楚我需要什么语法来从文件中获取文本,这些文本将以 dd/MM/yyyy 格式读入并使用

转换为日期值
import java.util.Date;

目前的错误是“找不到符号

符号:方法 SimpleDateFormat(String) 位置:class 数字图书馆

我不想让它寻找我写的方法...相反,我相信我想让它做的是使用

import java.text.SimpleDateFormat;

如有任何帮助,我们将不胜感激

public static Item createLibrary (ArrayList <Item> library)
{
    Scanner reader = null;
    try {
        File inputFile = new File("library.txt");
        reader = new Scanner(inputFile);
    } catch (FileNotFoundException ex) {
        System.out.println("Could not open the file.");
        System.exit(0);
    }

    //This loop fills the ArrayList with the input from the library.txt file
    for (int i =0; reader.hasNext(); i++)
    {
        Item a = new Item();
        a.setTitle(reader.nextLine());
        a.setFormat(reader.nextLine());
        a.setOnLoan(Boolean.parseBoolean(reader.nextLine()));
        a.setLoanedTo(reader.nextLine());
        //My problem is in the next two lines of code, specifically
        //SimpleDateFormat
        String dateFormat = "dd/MM/yyyy";
        a.setDateLoaned(SimpleDateFormat(dateFormat).parse(reader.nextLine()));
        reader.nextLine();

        //This adds the item with all the attributes to the ArrayList library
        library.add(a);
    }   
}

这是我在项目 class 中编写的单独代码,用于当我询问用户项目何时借出时类似且有效:

public Date getTheDateLoaned()
{
    System.out.println("What day was it loaned out in dd/MM/yyyy format?");
    String dateFormat = "dd/MM/yyyy";
    Scanner scanner = new Scanner(System.in);
    try 
    {
        return new SimpleDateFormat(dateFormat).parse(scanner.nextLine());
    } 
    catch (ParseException ex) 
    {
        System.out.println("This was not in the right format. The format"
                + "needs to be dd/MM//yyyy");
    }
return null;
}

再次感谢您的指导!

在没有看到错误的完整打印输出的情况下,我无法确定,但看起来您还没有导入 SimpleDateFormat。 在您的 class 语句之前,添加行 import java.text.SimpleDateFormat;,您应该已经准备就绪。你试过了吗?

还有,你忘了new。 试试这个:

a.setDateLoaned((new SimpleDateFormat(dateFormat)).parse(reader.nextLine()));

避免遗留 date-time classes

不确定你的错误。您 肯定需要有一个 import 语句 适合您要在代码中调用的 classes。

更重要的是:

  • 您试图在 date-time 对象中不恰当地表示 date-only 值。
  • 您正在使用麻烦的旧 date-time classes,它们现在已成为遗留问题,已被 java.time classes 取代。

尽可能使用 java.time classes,同时避免遗留的 classes。不需要 Date 也不需要 SimpleDateFormat.

LocalDate

LocalDate class 表示 date-only 值,没有 time-of-day 和时区。

重要提示:将 date-time 值序列化为文本时,请使用标准 ISO 8601 格式。标准格式合理、实用,易于跨文化的人类阅读,并且易于机器解析。当 parsing/generating 字符串时,java.time classes 默认使用标准格式。以适合用户的本地化格式呈现 date-time 值,但 以标准格式存储和交换数据

对于 date-only 值,标准格式是 YYYY-MM-DD 例如 2017-01-23.

定义格式模式以匹配您的输入。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "dd/MM/uuuu" );

解析您的输入字符串。

LocalDate ld = LocalDate.parse( "23/01/2017" , f );

在错误输入的情况下 DateTimeParseException 的陷阱。

时区

如果此应用适用于小型本地图书馆,您可以使用 LocalDate 作为 due-date。但是,如果合同规定到期的确切时间很重要,或者您的应用可能会跨时区使用,则您应该使用 date-time 值而不是 date-only 值。

在这种情况下,搜索 Stack Overflow 以获得 java.time classes InstantZoneIdZonedDateTime、[= 的许多讨论和示例15=]、LocalTimeLocalDateTime