Java SimpleDateFormat 和 CompareTo

发布于 2024-08-24 01:22:57 字数 682 浏览 7 评论 0原文

我有一个关于 SimpleDateFormat 类和 java.util.Date 的 Compareto 方法的问题:

我正在构造一个 Date 对象,然后进行格式化,最后解析格式化的字符串并与原始日期进行比较。

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS");
Date originalDate = new Date();

String s = df.format(originalDate);
Date parsedDate = df.parse(s);

System.out.println("Original date: " + originalDate);
System.out.println("Formatted date: " + s);
System.out.println("originalDate compareTo parsedDate: " + originalDate.compareTo(parsedDate));

结果:

原始日期:欧洲中部时间 1 月 25 日星期一 15:43:23 2010 格式化日期:2010.jan.25 03:43:23 868 原始日期 比较 解析日期:1

为什么我总是得到“1”?为什么原始日期大于解析日期?

I've got a question about SimpleDateFormat class and the java.util.Date's compareto method:

I'm constructing a Date object, then I format, finally I parse the formatted string and compare to the original date.

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS");
Date originalDate = new Date();

String s = df.format(originalDate);
Date parsedDate = df.parse(s);

System.out.println("Original date: " + originalDate);
System.out.println("Formatted date: " + s);
System.out.println("originalDate compareTo parsedDate: " + originalDate.compareTo(parsedDate));

The result:

Original date: Mon Jan 25 15:43:23 CET
2010 Formatted date: 2010.jan.25
03:43:23 868 originalDate compareTo
parsedDate: 1

Why I am getting always "1"? Why the original date grater than the parsed date?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

大姐,你呐 2024-08-31 01:22:57

我认为这是一个与 24 小时相关的问题,你的原始日期是 15 点,所以是下午 3 点,而你解析的日期是 12 小时格式,这是因为你使用了 h 格式说明符而不是 H 格式说明符。然后,您的小时会变成错误的字符串,因此您会失去精度,因为解析回 03 时会被视为凌晨 3 点。尝试使用:

DateFormat df = new SimpleDateFormat("yyyy.MMMdd HH:mm:ss SSS");

I think it's a 24h related problem, your original date it's 15, so 3PM, while your parsed one is in 12 hours format, this because you used h format specifier instead of H format specifier. You hour is then turned into the wrong string so you lose precision because when parsed back 03 is considered 3AM. Try with:

DateFormat df = new SimpleDateFormat("yyyy.MMMdd HH:mm:ss SSS");
分分钟 2024-08-31 01:22:57

如果您添加 Am/pm 标记 - a,它就会起作用

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS a");

It works if you add the Am/pm marker - a

DateFormat df = new SimpleDateFormat("yyyy.MMMdd hh:mm:ss SSS a");
黯然 2024-08-31 01:22:57

如果您只想比较日期,也许使用 getTime() 来比较两个值会是一个更好的主意......

If you wish to merely compare the dates, perhaps using getTime() to compare the two values would be a better idea...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文