我想从输入的小时和分钟构建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,构造函数强制我们提供年,月,日,这在我的情况下是多余的。
任何帮助都将受到高度赞赏。