使用 GWT / Java 获取日期?

Get dates with GWT / Java?

在GWT/Java中如何获取第一天的第一小时、第一分钟和第二秒以及最后一天的最后一小时、最后一分钟和最后一秒?

以及如何以这种方式格式化数据:

2017-01-08T04:00:00.000Z

使用 Date 对象的弃用方法。

使用日期时间格式

所以你所要做的就是一个简单的带日期的数学技巧 代码看起来像(假设在您的区域设置中一周的第一天是星期一)

    Date myCurrentDate = new Date();

    long timeInFirstWeek = (myCurrentDate.getTime() - 345600000 + 3600000) % 604800000;
    Date firstDateOfWeek = new Date(myCurrentDate.getTime() - timeInFirstWeek - 3600000);
    Date lastDateOfWeek = new Date(firstDateOfWeek.getTime() + 604800000 - 1);

    GWT.log(DateTimeFormat.getFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(lastDateOfWeek));
    GWT.log(DateTimeFormat.getFormat("yyyy-MM-dd'T'HH:mm:ss'Z'").format(firstDateOfWeek));

说明: 要找出我们现在是星期几,我们需要一些常量。在日期时间中只有一个常量是 0 (setTime(0)) 但这是 1970 年 1 月 1 日星期四 01:00。让我们回到 70 年代。为此,我们将 "our time now" 除以 "one week" 的时间,即 604800000 毫秒。 因为我们使用我们期望的模数,在 1970 年的第一周。但是星期四和 01:00 小时仍然存在问题。如何解决这个问题? 我们从当前时间中减去四天 = 345600000 毫秒,再加上这个一小时 3600000。现在我们登陆 00:00 1970 年星期一! 现在我们有变量 timeInFirstWeek,它指示仅在 1970 年的第一周过去的时间。换句话说,我们从时间中删除所有其他周,我们只有一周。

所以现在您可能猜到我们所要做的就是从当前日期减去 timeInFirstWeek 以获得一周的第一秒。为了获得一周的最后一秒,我们需要添加一周 = 604800000,然后减去一毫秒。

使用 @Knarf 提到的格式,您可以使用 DateTimeFormat。此外,它已从 GWT 2.8 中的弃用中暂时删除,如代码所述

 // Temporarily remove deprecation to keep from breaking teams that don't allow
 // deprecated references.
 // @Deprecated

我认为 com.google.gwt.user.datepicker.client.CalendarUtil class 中的 getStartingDayOfWeek() 在这里会有帮助。

得到周首日后,我们可以直接设置时分秒来重新设置开始时间的日期。

对于上周的时间,我们可以添加一些常量值。