Joda DateTime 在解析字符串时自动更改时区
Joda DateTime automatically change timezone when parsing string
我有一个 "iso8601" 格式的日期字符串,当我使用 Joda "DateTime" 解析它时,日期的时区会自动更改。
DateTime dateTime = new DateTime( "2017-05-22T08:10:00.000+0300" ) ;
System.out.println(dateTime);
它的输出是:
2017-05-22T09:40:00.000+04:30
如你所见,第一个字符串的时区是+3:00,解析后的时区是+04:30。如何在不更改时区的情况下解析第一个字符串? (所以即使在解析之后时区仍然是 +03:00)
您必须像这样手动设置时区:
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));
此构造函数使用用户的默认时区。您需要使用 DateTime(Object object, DateTimeZone zone)
构造函数手动设置时区。
或者,像这样使用 withOffsetParsed()
解析这个字符串:
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ");
DateTime dateTime = formatter.withOffsetParsed().parseDateTime("2017-05-22T08:10:00.000+0300");
您可以使用 JDK 8 日期时间 API 的内置功能轻松解决此问题。以下代码打印 2017-05-22T08:10+03:00.
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
我有一个 "iso8601" 格式的日期字符串,当我使用 Joda "DateTime" 解析它时,日期的时区会自动更改。
DateTime dateTime = new DateTime( "2017-05-22T08:10:00.000+0300" ) ;
System.out.println(dateTime);
它的输出是:
2017-05-22T09:40:00.000+04:30
如你所见,第一个字符串的时区是+3:00,解析后的时区是+04:30。如何在不更改时区的情况下解析第一个字符串? (所以即使在解析之后时区仍然是 +03:00)
您必须像这样手动设置时区:
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));
此构造函数使用用户的默认时区。您需要使用 DateTime(Object object, DateTimeZone zone)
构造函数手动设置时区。
或者,像这样使用 withOffsetParsed()
解析这个字符串:
DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'hh:mm:ss.SSSZ");
DateTime dateTime = formatter.withOffsetParsed().parseDateTime("2017-05-22T08:10:00.000+0300");
您可以使用 JDK 8 日期时间 API 的内置功能轻松解决此问题。以下代码打印 2017-05-22T08:10+03:00.
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