【发布时间】:2021-08-23 18:07:16
【问题描述】:
我需要将日期从 2021-08-21T17:36:51.000+00:00 转换为 2021-08-21 06:36 PM BST(+1)强>使用java 任何帮助
【问题讨论】:
-
如果日期不在一年中的夏令时 (DST) 部分,那么您想要哪个结果?
-
欢迎来到 Stack Overflow。到目前为止,您尝试了哪些方法来找到答案?
我需要将日期从 2021-08-21T17:36:51.000+00:00 转换为 2021-08-21 06:36 PM BST(+1)强>使用java 任何帮助
【问题讨论】:
您可以使用OffsetDateTime#withOffsetSameInstant 来满足此要求。
演示:
import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
OffsetDateTime source = OffsetDateTime.parse("2021-08-21T17:36:51.000+00:00");
OffsetDateTime target = source.withOffsetSameInstant(ZoneOffset.of("+01:00"));
System.out.println(target);
// Custom format
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("uuuu-MM-dd hh:mm a O", Locale.ENGLISH);
String formatted = dtf.format(target);
System.out.println(formatted);
// Replace GMT with BST to get the required string
formatted = formatted.replaceFirst("GMT([+\\-]\\d+)", "BST($1)");
System.out.println(formatted);
}
}
输出:
2021-08-21T18:36:51+01:00
2021-08-21 06:36 PM GMT+1
2021-08-21 06:36 PM BST(+1)
通过 Trail: Date Time 了解有关 modern Date-Time API* 的更多信息。
* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个Android项目工作并且您的Android API级别仍然不符合Java-8,请检查Java 8+ APIs available through desugaring和How to use ThreeTenABP in Android Project。
【讨论】: