关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。
13天前关门了。
改进这个问题
我在java上使用api中的日期。我想得到今天的日期和时间,将它写入一个类,然后写入一个csv文件(我使用csv文件作为数据存储)。然后,实现获取今天的记录报告的功能,获取报告并将其与今天的日期(准确的日期,没有时间)进行比较。最好的方法是什么?现在我把它存储在timestamp中,但它似乎不正确,我应该使用string吗?那我需要两个解析器?把一个字符串翻译成一个日期和时间,然后再翻译成一个日期?哪个图书馆更适合做这个?
我写了一个从字符串到时间戳的翻译,对吗?
default Timestamp StringToTimestamp(String date) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-YYYY");
Date parsedDate = null;
try {
parsedDate = dateFormat.parse(date);
} catch (ParseException e) {
e.printStackTrace();
log.error("Error in date parsing");
}
return new Timestamp(parsedDate.getTime());
}
upd我修改了java.time库的代码,但似乎我做错了什么
default LocalDate StringToTimestamp(String date) {
DateTimeFormatter dtf = DateTimeFormatter.ofPattern('yyyy-mm-dd');
LocalDate date = LocalDate.parse(date, dtf);
return date;
}
我根据答案@olev.v编辑了代码。它真的很酷
1条答案
按热度按时间56lgkhnf1#
java.time文件
我建议您在日期和时间工作中使用java.time,即现代的java日期和时间api。我建议将当前日期和时间以及utc的偏移量写入csv文件。
刚才在我的时区运行时的输出:
2020-12-26t11:02:07.368973+01:00
字符串是iso8601格式的,这应该是最好的,以避免任何人阅读它的惊喜。time的类通常从它们的
toString
方法。通常,您对一致性的重视程度高于在写入文件时知道使用了哪个utc偏移量。如果是,请将utc时间写入文件:
2020-12-26t10:02:07.373439z
无论上面使用哪种方式,从文件中读取时间戳后,都要按以下方式转换:
同一天?是的
我已经确保我比较的两个日期都在程序运行的jvm的时区。请考虑是否有您想要的特定时区,如果有,请设置
zone
像这样的ZoneId.of("Asia/Baku")
. 重要的是:在所有的时区都不是同一个日期。如果您想知道日期是早还是晚,请使用
isBefore
或者isAfter
方法LocalDate
.你的代码正确吗?
您的代码最糟糕的问题是使用了旧的、设计糟糕的日期时间类:
SimpleDateFormat
,Date
以及Timestamp
.SimpleDateFormat
是一个声名狼藉的捣蛋鬼。Date
在Java1.0中有严重的设计缺陷,因此大多数构造函数和方法在Java1.1中已经被弃用了。Timestamp
除了在sql数据库之间传输高精度时间戳(我们也不再使用它了)之外,从来没有其他用途。这是一个真正的黑客在已经糟糕的设计之上Date
班级。此外,我看不到任何你想使用的高精度Timestamp
因此,在这里使用它似乎毫无意义。代码中有一个bug:您使用的是大写
YYYY
以你的格式模式。这是一年中的一周,只对周数有用。我试着给予24-06-2021
你的方法。它回来了2021-01-04 00:00:00.0
. 由于上述错误,5个月20天的假期。显然地SimpleDateFormat
默认为周年的第1周开始,忽略月和月日。另外,如果您尝试用java.time使用相同的格式模式字符串进行解析,它至少会告诉您这是错误的。
链接
oracle教程:date time解释如何使用java.time。
维基百科文章:iso 8601
相关问题:到目前为止的java解析字符串