【问题标题】:Convert date to BST java将日期转换为 BST java
【发布时间】: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。到目前为止,您尝试了哪些方法来找到答案?

标签: java date format


【解决方案1】:

您可以使用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)

ONLINE DEMO

通过 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 desugaringHow to use ThreeTenABP in Android Project

【讨论】:

  • 我需要输出日期为 2021-08-21 06:36 PM BST(+1) 而不是 2021-08-21T18:36:51+01:00
  • @DavidIshak - BST(英国夏令时)不是标准时区名称。无论如何,我已经发布了一个解决方案来满足您的特定要求。
猜你喜欢
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
相关资源
最近更新 更多