将文件中的输入转换为 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 Instant
、ZoneId
、ZonedDateTime
、[= 的许多讨论和示例15=]、LocalTime
和 LocalDateTime
。
我有一个文本文件,我正在从中导入数据,该文件是有关库中项目的信息。这些信息之一是借出物品的日期。我无法弄清楚我需要什么语法来从文件中获取文本,这些文本将以 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 Instant
、ZoneId
、ZonedDateTime
、[= 的许多讨论和示例15=]、LocalTime
和 LocalDateTime
。