【问题标题】: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(); 似乎有效

标签: java datetime date calendar


【解决方案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 日期功能要好得多。
猜你喜欢
  • 2015-05-22
  • 1970-01-01
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多