Adz*_*Adz 3 java time local jodatime
DateTime dt = new DateTime("2014-09-15T21:20:14");
System.out.println(dt);
System.out.println(dt.plusMillis(581042272).toDateTime().toLocalDateTime().toDateTime(DateTimeZone.forID("GMT")));
Run Code Online (Sandbox Code Playgroud)
dt中的时间是UTC,我想将时间设置为dt加上毫秒到GMT?但是,时间仍然打印为UTC(格林威治标准时间晚1小时).我如何设置它以便在前面一个小时?
2014-09-15T21:20:14.000+01:00
2014-09-22T14:44:16.272Z
Run Code Online (Sandbox Code Playgroud)
我知道时间正好落后一小时,因为我在格林威治标准时间15:44:16提出了这个请求
对于那些将datetime从服务器转换为本地日期时间有困难的人:
1.确保服务器为您提供UTC时间,这意味着格式应包含时区.2.转换模式,如果api没有给你一个时区,那么你可能因为最后一个'Z'而得到一个例外.
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
DateTime dt = formatter.parseDateTime(currentPost.postDate);
Run Code Online (Sandbox Code Playgroud)
3.检查时间偏移(可选)
DateTimeZone ActualZone = dt.getZone();
Run Code Online (Sandbox Code Playgroud)
4.转到当地时间
TimeZone tz2 = TimeZone.getDefault();
DateTime localdt = new DateTime(dt, DateTimeZone.forID(tz2.getID()));
Run Code Online (Sandbox Code Playgroud)
(如果您自己控制API,并且碰巧是asp.net api,请检查此项,设置Kind日期时间,即使您可能已将其保存为数据库中的UTC时间,您也会发送日期时间与默认服务器时区)
您DateTime实际上不是 UTC - 它位于系统默认时区.要修复它,您只需要告诉它您传入的值是UTC:
DateTime dt = new DateTime("2014-09-15T21:20:14", DateTimeZone.UTC);
System.out.println(dt);
DateTime other = dt.plusMillis(581042272);
System.out.println(other);
Run Code Online (Sandbox Code Playgroud)
输出:
2014-09-15T21:20:14.000Z
2014-09-22T14:44:16.272Z
Run Code Online (Sandbox Code Playgroud)
另请注意,您无法在格林威治标准时间15:44:16提出请求,因为尚未发生.在我写这篇文章时,它是英国夏令时16:05,因此格林尼治标准时间15:05.重要的是要了解英国的时区不是"GMT" - 这只是我们没有观察到夏令时的时区的一部分.
如果您想转换为英国时区,您需要:
DateTime other = dt.plusMillis(581042272)
.withZone(DateTimeZone.forID("Europe/London"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12657 次 |
| 最近记录: |