当前位置: 首页 > 知识库问答 >
问题:

如何从“20201023T200457Z”和“EEE MMM dd HH:mm:ss zzz yyyy”生成本地化日期时间?[副本]

仉伟兆
2023-03-14

我有一个开始日期时间:“20201023T200457Z”(似乎是UTC0000)如何在移动设备上用本地时间的“yyyyMMdd HH:mm:ss”模式转换/生成它?

我得到这个结果:周五10月23 20:04:57格林尼治标准时间02:00 2020与此代码:

    SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd'T'HHmmss'Z'", Locale.getDefault());
    Date startGMTInput = df.parse(start);
    Log.e(TAG, "start: " + startGMTInput.toString());// -> Fri Oct 23 20:04:57 GMT+02:00 2020

但我的目标是:2020-10-23 22:04:57//因为我在格林尼治标准时间2时区

共有2个答案

米丰
2023-03-14

在任何日期操作之前,将时区设置为GMT 2。

isoFormat.setTimeZone(TimeZone.getTimeZone("GMT+2"));
有翰海
2023-03-14

考虑使用java。时间,现代Java日期和时间API,用于日期和时间工作。让我们首先定义我们需要的格式化程序:

private static final DateTimeFormatter inputFormatter
        = DateTimeFormatter.ofPattern("uuuuMMdd'T'HHmmssX");
private static final DateTimeFormatter outputFormatter
        = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss");

DateTimeFormatter是线程安全的,因此我们可以安全地将它们声明为静态。)明确进行时区转换:

    String startString = "20201023T200457Z";
    Instant start = inputFormatter.parse(startString, Instant.FROM);
    String target = start.atZone(ZoneId.systemDefault()).format(outputFormatter);
    System.out.println(target);

我所在时区的输出(当前偏移量为02:00,与您的相同):

20201023 22:04:57

JAVA时间在较旧和较新的Android设备上都能很好地工作。它至少需要Java6。

  • 在Java8和更高版本以及更新的Android设备上(从API级别26),现代API内置。只有在这种情况下使用方法引用Instant::from而不是常量Instant。从代码。
  • 在非AndroidJava6和7获得Threeten Backport,现代类的Backport(JSR 310的Threeten;请参阅底部的链接)。
  • 在较旧的Android上,要么使用脱脂或Android版的Threeten Backport。它叫做ThreeTenABP。在后一种情况下,请确保从带有子包的org.threeten.bp导入日期和时间类。
  • Oracle教程:解释如何使用java的日期时间。时间

 类似资料:
  • 我得到这个结果:10月23日星期五20:04:57 GMT+02:00 202,代码如下: 但我的目标是得到:2020-10-2322:04:57//因为我在GMT+2时区

  • 问题内容: 我正在尝试将一个实例转换为一个实例。 我没有得到编译器错误,但是实例值是错误的。 我认为这不起作用,因为它存储时间而不是。 我正在使用JDK 1.8版。 问题答案: 您的输入实际上是一个。简单地将其解析为a 然后从中获取会更简单。无需担心时区,无需保留某些传统课程(避免并在可能的情况下…)

  • 我有一个时区字符串,例如,“太平洋时间(美国和加拿大)”。对于特定的日期,包括夏令时,我需要在该时区以UTC获得相当于3PM的值。我该怎么做呢? 例如,我需要在UTC时间中找到12月3日PDT的3PM。

  • 问题内容: 如何在Swift中获取本地日期和时间? 问题答案: 我已经找到答案了。

  • 我尝试在java中使用本地化以本地样式打印日期。我已经使用数字和货币制作了类似的功能,但我未能将相同的行为应用到日期。 正如我在几天前发布此主题时所了解的,GraalVM Quarkus Locale在本机模式下,使用本机模式下的本地化需要使用创建一个“@AutomaticFeature”。 这个技巧适用于数字和货币: 但它不适用于DateTimeFormatter: 在开发模式下一切正常,但在原

  • 问题内容: 我基本上是想将Unix时间戳(time()函数)转换为与过去和将来的日期都兼容的相对日期/时间。因此输出可能是: 2个星期前 1小时60分钟前 15分钟54秒前 10分钟15秒后 首先,我尝试编写此代码,但是做了一个无法维护的巨大功能,然后我在互联网上搜索了几个小时,但我所能找到的只是脚本仅产生一部分时间(例如:“ 1小时前”纪要)。 您是否已经有执行此操作的脚本? 问题答案: 此功能