如何根据输入的小时,分​​钟和时区构建日期时间

时间:2016-09-04 23:12:58

标签: java jodatime

我想从输入的小时和分钟构建GMT的日期时间(即“16:04 GMT”)。

我这样做是为了测试:

int hour = 16, minute = 4;
DateTime today = new DateTime().withHourOfDay(hour).withMinuteOfHour(minute);
        DateTime yesterday = today.minusDays(1);
        sdf.applyPattern("yyyy-MM-dd HH:mm:ss");
        sdf.setTimeZone(TimeZone.getTimeZone("Etc/GMT"));

        System.out.println(today.toDate().getTime());
        System.out.println(sdf.format(today.toDate()));

        DateTime todayGMT = new DateTime().withHourOfDay(hour).withMinuteOfHour(minute).withZone(DateTimeZone.forID("Etc/GMT"));
        System.out.println(todayGMT.toDate().getTime());
        System.out.println(sdf.format(todayGMT.toDate()));

        DateTime todayGMTZRF = new DateTime().withHourOfDay(hour).withMinuteOfHour(minute).withZoneRetainFields(DateTimeZone.forID("Etc/GMT"));
        System.out.println(todayGMTZRF.toDate().getTime());
        System.out.println(sdf.format(todayGMTZRF.toDate()));

我得到的输出是:

1473023066204
2016-09-04 21:04:26
1473023066228
2016-09-04 21:04:26
1473005066228
2016-09-04 16:04:26

看起来第三个正在给出正确的答案。我不确定日期时间是如何工作的,因为每次运行程序时SDF输出都相同,但getTime()返回不同的结果。这也是构建它的最佳方法(即创建“new DateTime()”并使用with ...方法)?我查找了DateTime的javadoc,构造函数强制我们提供年,月,日,这在我的情况下是多余的。

任何帮助都将受到高度赞赏。

0 个答案:

没有答案