首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Joda DateTime在解析字符串时自动更改时区。

Joda DateTime在解析字符串时自动更改时区。
EN

Stack Overflow用户
提问于 2017-05-20 12:46:18
回答 3查看 1.2K关注 0票数 0

我有一个"iso8601“格式的日期字符串,当我使用Joda "DateTime”解析它时,日期的时区会自动变化。

代码语言:javascript
运行
复制
  DateTime dateTime = new DateTime( "2017-05-22T08:10:00.000+0300" ) ;
  System.out.println(dateTime);

其产出是:

代码语言:javascript
运行
复制
2017-05-22T09:40:00.000+04:30

如您所见,第一个字符串的时区为+3:00,解析后的时区为+04:30。如何在不更改时区的情况下解析第一个字符串?(所以时区在解析后仍保持+03:00 )

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-20 13:05:55

此构造函数使用用户的默认时区。您需要使用DateTime(Object object, DateTimeZone zone) construnctor手动设置时区。

或者,使用withOffsetParsed()解析这个字符串,如下所示:

代码语言:javascript
运行
复制
    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ");
    DateTime dateTime = formatter.withOffsetParsed().parseDateTime("2017-05-22T08:10:00.000+0300");
票数 2
EN

Stack Overflow用户

发布于 2017-05-20 12:57:34

您必须手动设置时区,如下所示:

代码语言:javascript
运行
复制
String str =  "2017-05-22T08:10:00.000+0300" ;
DateTime dateTime = new DateTime() ;

System.out.println(dateTime);
String tzName = str.substring(text.length() - 5);
DateTimeZone tz = DateTimeZoneDateTimeZone forID(str.substring(3) + ":" + str.substring(text.length() - 2))
System.out.println(dateTime.withZone(tz));
票数 0
EN

Stack Overflow用户

发布于 2017-05-20 13:15:48

您可以使用JDK 8日期时间API的内置功能来轻松解决这个问题。以下代码打印2017-05-22T08:10+03:00。

代码语言:javascript
运行
复制
DateTimeFormatter df = DateTimeFormatter.ISO_OFFSET_DATE_TIME ;
OffsetDateTime date1 = OffsetDateTime.parse("2017-05-22T08:10:00.000+03:00", df);
System.out.println(date1); //prints 2017-05-22T08:10+03:00
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44086046

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档