DateTimeFormatter 是否有类似 Joda 的 DateTimeFormatter#withOffsetParsed() 方法的东西?
Does DateTimeFormatter Have Anything Like The Joda's DateTimeFormatter#withOffsetParsed() method?
我对新 Java 日期-API 有疑问,尤其是 java.time.DateTimeFormatter
.
我正在寻找一种将 TimeZone-Offset 添加到给定时间的方法。
例如
"2016-05-27 14:22:00 UTC+2"
应解析为
"27.05.2016 16:22:00"
(使用模式 "dd.MM.yyyy HH:mm:ss")
这是我有问题的代码:
LocalDateTime time = LocalDateTime.now();
LOG.debug(time.format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"));
格式化会生成与给定模式匹配的时间字符串,但不考虑本地时区的偏移量。
是的,您可以指定要考虑的偏移量。
你可以用几种不同的方式做到这一点,但我会分享
一些可以帮助您前进的代码。
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Local.US);
这是一个示例,说明如何使用一组模式和偏移创建格式化对象。
应用时区、偏移量和格式的多种方法之一。这将有助于在 Joda 和 Java 之间切换 8 次。
Java 8 date/time api
String input = "2016-05-27 14:22:02 UTC+0200";
DateTimeFormatter parser = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss 'UTC'Z");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");
LocalDateTime localDateTime = parser.parse(input, LocalDateTime::from);
System.out.println(localDateTime); //2016-05-27T14:22:02
//Apply different offset on the above instant.
OffsetDateTime offsetDateTime = parser.parse(input, OffsetDateTime::from).withOffsetSameInstant(ZoneOffset.of("+07:00"));
System.out.println(offsetDateTime); //2016-05-27T19:22:02+07:00
//Apply different timezone on the above instant.
ZonedDateTime zonedDateTime = parser.parse(input, ZonedDateTime::from).withZoneSameInstant(ZoneId.of("Asia/Jakarta"));
System.out.println(zonedDateTime);// 2016-05-27T19:22:02+07:00[Asia/Jakarta]
//Apply formatting
System.out.print(formatter.format(zonedDateTime));//27.05.2016 19:22:02
乔达api
String input = "2016-05-27 14:22:02 UTC+0200";
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss 'UTC'Z");
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss");
LocalDateTime localDateTime = parser.parseLocalDateTime(input);
System.out.println(localDateTime);//2016-05-27T14:22:02.000
//Apply the above offset to the date time
DateTime offsetParsedDateTime = parser.withOffsetParsed().parseDateTime(input);
//Change to new Offset
DateTime jakartaDateTimeOffset = offsetParsedDateTime.toDateTime(DateTimeZone.forOffsetHours(7));
System.out.println(jakartaDateTimeOffset);//2016-05-27T19:22:02.000+07:00
//Change to new Zone
DateTime jakartaDateTimeZone = offsetParsedDateTime.toDateTime( DateTimeZone.forID("Asia/Jakarta") );
System.out.println(jakartaDateTimeZone);//2016-05-27T19:22:02.000+07:00
//Apply formatting
System.out.print(formatter.print(jakartaDateTimeZone ));//27.05.2016 19:22:02
我对新 Java 日期-API 有疑问,尤其是 java.time.DateTimeFormatter
.
我正在寻找一种将 TimeZone-Offset 添加到给定时间的方法。
例如
"2016-05-27 14:22:00 UTC+2"
应解析为
"27.05.2016 16:22:00"
(使用模式 "dd.MM.yyyy HH:mm:ss")
这是我有问题的代码:
LocalDateTime time = LocalDateTime.now();
LOG.debug(time.format(DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss"));
格式化会生成与给定模式匹配的时间字符串,但不考虑本地时区的偏移量。
是的,您可以指定要考虑的偏移量。 你可以用几种不同的方式做到这一点,但我会分享 一些可以帮助您前进的代码。
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'", Local.US);
这是一个示例,说明如何使用一组模式和偏移创建格式化对象。
应用时区、偏移量和格式的多种方法之一。这将有助于在 Joda 和 Java 之间切换 8 次。
Java 8 date/time api
String input = "2016-05-27 14:22:02 UTC+0200";
DateTimeFormatter parser = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss 'UTC'Z");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss");
LocalDateTime localDateTime = parser.parse(input, LocalDateTime::from);
System.out.println(localDateTime); //2016-05-27T14:22:02
//Apply different offset on the above instant.
OffsetDateTime offsetDateTime = parser.parse(input, OffsetDateTime::from).withOffsetSameInstant(ZoneOffset.of("+07:00"));
System.out.println(offsetDateTime); //2016-05-27T19:22:02+07:00
//Apply different timezone on the above instant.
ZonedDateTime zonedDateTime = parser.parse(input, ZonedDateTime::from).withZoneSameInstant(ZoneId.of("Asia/Jakarta"));
System.out.println(zonedDateTime);// 2016-05-27T19:22:02+07:00[Asia/Jakarta]
//Apply formatting
System.out.print(formatter.format(zonedDateTime));//27.05.2016 19:22:02
乔达api
String input = "2016-05-27 14:22:02 UTC+0200";
DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss 'UTC'Z");
DateTimeFormatter formatter = DateTimeFormat.forPattern("dd.MM.yyyy HH:mm:ss");
LocalDateTime localDateTime = parser.parseLocalDateTime(input);
System.out.println(localDateTime);//2016-05-27T14:22:02.000
//Apply the above offset to the date time
DateTime offsetParsedDateTime = parser.withOffsetParsed().parseDateTime(input);
//Change to new Offset
DateTime jakartaDateTimeOffset = offsetParsedDateTime.toDateTime(DateTimeZone.forOffsetHours(7));
System.out.println(jakartaDateTimeOffset);//2016-05-27T19:22:02.000+07:00
//Change to new Zone
DateTime jakartaDateTimeZone = offsetParsedDateTime.toDateTime( DateTimeZone.forID("Asia/Jakarta") );
System.out.println(jakartaDateTimeZone);//2016-05-27T19:22:02.000+07:00
//Apply formatting
System.out.print(formatter.print(jakartaDateTimeZone ));//27.05.2016 19:22:02