在 Java 中创建日期的正确方法是啥? [复制]

Posted

技术标签:

【中文标题】在 Java 中创建日期的正确方法是啥? [复制]【英文标题】:What's the right way to create a date in Java? [duplicate]在 Java 中创建日期的正确方法是什么? [复制] 【发布时间】:2011-09-20 04:53:39 【问题描述】:

我对 Date 类的 Java API 感到困惑。一切似乎都已被弃用,并链接到 Calendar 类。所以我开始使用 Calendar 对象来做我希望用 Date 来做的事情,但直觉上,当我真正想做的只是创建和比较两个日期时,使用 Calendar 对象有点困扰我。

有没有简单的方法来做到这一点?现在我愿意

Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(0);
cal.set(year, month, day, hour, minute, second);
Date date = cal.getTime(); // get back a Date object

【问题讨论】:

@Bohemian 代码有问题:创建的Date 对象的毫秒设置为执行代码时的内部时钟(如果您调用@ cal.set(...) 之前的 987654323@ - 虽然会产生一些愚蠢的代码)。刚遇到这个问题... @kratenko 好点。无论如何,日历都是一团糟:/ Date date = new GregorianCalendar(year, month, day).getTime(); 似乎有效 【参考方案1】:

您可以使用SimpleDateFormat

SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date d = sdf.parse("21/12/2012");

但我不知道它是否应该被认为比使用日历更正确 ...

【讨论】:

我认为这更慢,因为它必须解析一个字符串。 是的,你可能是对的,但它也是最“可读”的约会方式,所以如果你没有在循环中这样做...... 请记住 SimpleDateFormat 不是同步的。如果您重用实例并且两个方法访问相同的 SimpleDateFormat,则会导致错误。【参考方案2】:

优秀的joda-time 库几乎总是比Java 的Date 或Calendar 类更好的选择。举几个例子:

DateTime aDate = new DateTime(year, month, day, hour, minute, second);
DateTime anotherDate = new DateTime(anotherYear, anotherMonth, anotherDay, ...);
if (aDate.isAfter(anotherDate)) ...
DateTime yearFromADate = aDate.plusYears(1);

【讨论】:

我接受了这个建议,这对我很有用。标准的 Java 日期类使用起来确实很痛苦。我使用了 jodatime,并在不到一分钟的时间内完成了使用日期的任务!谢谢。 Joda-time 更新网站:joda.org/joda-time【参考方案3】:

你可以试试joda-time。

【讨论】:

为此 +1 - 在我看来,Joda 时间比内置的 Java 日期功能要好得多。

以上是关于在 Java 中创建日期的正确方法是啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 PHP 7 中创建类似枚举的行为的推荐方法是啥? [复制]

在 kotlin 中创建泛型类的新实例的正确方法是啥?

在 JavaScript 中创建类并将其传递给 MVC 控制器的正确方法是啥

在 python 中创建字符串数组的最佳方法是啥?

如何在 Java 静态块中创建本地类? [复制]

如何更快地在 Java 中创建/复制对象? [复制]