【问题标题】:Getting 24hr time when adding miliseconds to a Date? [duplicate]向日期添加毫秒时获得 24 小时时间? [复制]
【发布时间】:2017-05-19 10:17:17
【问题描述】:

我有以下 Java 代码,它需要一个日期,并且应该在日期上加上一整天:

SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
String dateString = "2017-01-30T19:00:00+0000"
Date date = formatter.parse(dateString);

long timeBetweenStartDates = 24 * 60 * 1000;
Long DateWithOneDayAddedInMilis = date.getTime()+timeBetweenStartDates;
Date dateWithOneDayAdded = new Date((DateWithOneDayAddedInMilis));

dateWithOneDayAdded 我得到的价值是:

Mon Jan 30 13:24:00 GMT 2017

我在这里寻找的是:

 Tue Jan 31 13:24:00 GMT 2017

如何确保日期是我期望的格式?

【问题讨论】:

  • 为什么要添加一整天?你只增加了 24 分钟。 1000 毫秒 = 1 秒。 60 * 1000 毫秒 = 1 分钟。 24 * 60 * 1000 毫秒 = 24 分钟。
  • long timeBetweenStartDates = 24 * 60 * 60* 1000;
  • 我认为您的意思是您希望 Tue Jan 31 13:00:00 (your time zone here) 2017 没有 24,而不是 Tue Jan 31 13:24:00 GMT 2017

标签: java string datetime simpledateformat


【解决方案1】:

哦,这是一个很好的例子,说明新的日期和时间类对程序员更友好。有了这些,就几乎不可能像你犯的那样犯错误(而且用旧的类很容易犯,特别是一旦你编写了代码就很难发现)。

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ");
    String dateString = "2017-01-30T19:00:00+0000";
    OffsetDateTime dateTime = OffsetDateTime.parse(dateString, formatter);
    OffsetDateTime dateWithOneDayAdded = dateTime.plusDays(1);
    System.out.println(dateWithOneDayAdded);

打印出来

2017-01-31T19:00Z

您当然可以按照您或您的用户喜欢的方式格式化计算的日期时间。

另一个好处是plusDays() 可以很好地处理夏令时 (DST) 的转换,并在第二天(如果可能)到达同一时间,而不是盲目地增加 24 小时。

【讨论】:

  • 不确定,但我想我读到过,对于 Java 9 的这种特殊格式,您可以只使用 OffsetDateTime.parse(dateString) 而不使用格式化程序。
猜你喜欢
  • 2015-08-21
  • 2023-01-19
  • 2012-11-25
  • 2017-02-14
  • 1970-01-01
  • 2023-03-27
  • 2023-04-08
  • 1970-01-01
  • 2012-04-08
相关资源
最近更新 更多