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

Java:ZonedDateTime-获取引用时间戳的偏移量

谭嘉歆
2023-03-14

我有一个UTC的时间戳。我将其转换为本地时间。我的时区是CET/CEST。

2018-10-03 12:00 UTC => 14:00 CEST
2018-10-30 12:00 UTC => 13:00 CET

由于我的时区,系统会自动应用正确的偏移量:如果我在夏天转换时间戳,它会自动添加2小时(无论何时转换),如果在冬天,它会添加1小时。

到目前为止-很好。

现在,我想基于另一个引用的时间戳转换UTC时间戳。如果引用在夏季,则应始终添加2小时-无论转换的时间戳是夏季还是冬季-如果引用在冬季,则应始终添加1小时。

Ref = 01.01.2018 = CET
2018-10-03 12:00 UTC => 13:00 CET
2018-10-30 12:00 UTC => 13:00 CET

Ref = 01.10.2018 = CEST
2018-10-03 12:00 UTC => 14:00 CEST
2018-10-30 12:00 UTC => 14:00 CEST

那么,如果我的系统运行正常的CEST/CET,我如何找出参考时间戳(以UTC为单位)的时区(或与UTC的偏移量)??

我通常使用ZoneDateTime。

共有2个答案

邓昊天
2023-03-14

如果日期在UTC,则可以将其从字符串解析为日期对象,然后可以将其转换回本地时区中的字符串。请检查以下代码示例:

        SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
        isoFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
        Date date = isoFormat.parse("2018-10-03 12:00");

        isoFormat.setTimeZone(TimeZone.getDefault());
        System.out.println("Date in my local timezone is "+isoFormat.format(date));
苏弘盛
2023-03-14

您可以从您拥有的参考中获取分区ID,并使用它将UTC中的时间戳调整到该分区:

设置

    ZoneId cet = ZoneId.of("CET");

    // The reference timestamps, these could be any ZonedDateTime
    // but I specifically make one for winter and one for summer
    ZonedDateTime refWinter = ZonedDateTime.of(LocalDateTime.parse("2018-01-01T12:00"), cet);
    ZonedDateTime refSummer = ZonedDateTime.of(LocalDateTime.parse("2018-10-01T12:00"), cet);

    // The UTC timestamp that you want to convert to the reference zone
    ZonedDateTime utc = ZonedDateTime.of(LocalDateTime.parse("2018-10-03T12:00"), ZoneOffset.UTC);

转变

    // The converted timestamps
    ZonedDateTime convertedWinter = utc.withZoneSameInstant(refWinter.getOffset());
    ZonedDateTime convertedSummer = utc.withZoneSameInstant(refSummer.getOffset());

    System.out.println(convertedWinter); // 2018-01-03T13:00+01:00
    System.out.println(convertedSummer); // 2018-10-03T14:00+02:00
 类似资料:
  • 我有到UTC的秒偏移量,数据库中存储的所有时间戳都是UTC,如何在选择查询期间应用偏移量, 我想在UTC时间插入数据库并在本地时间检索。 在PHP上: 我可以在select的mysql运行时中减去unix\u timestamp字段$user\u timezone\u offset吗? 我正在插入UTC,这显然是我所需要的,但为了选择用户的本地时间,我需要以某种方式将偏移量应用于存储在数据库中的时

  • JSON-API-response包含以下属性: 我使用Moshi和ThreeTenBp解析时间戳,并准备了以下自定义适配器: 如您所见,区域偏移量在这里是硬编码的。 ... 使用Moshi和Kotlin的高级JSON解析技术 相关项目的进行中的分支

  • 我需要将查询中的日期值转换为带有时区的时间戳,但目前我得到的时区区域(“欧洲/巴黎”)是EF使用的无效区域。 例如,在执行此操作时:

  • 问题内容: 通过将值放入构造函数中,我可以将unix时间戳转换为对象。例如:我可以将其作为。 但是在那之后,如何从该对象取回unix时间戳? 问题答案: 检索自格林尼治标准时间1970年1月1日传递给构造函数以来的毫秒数。从中获得Unix时间(相同,但以秒为单位)并不难。

  • 问题内容: 我想要这样的当前时间戳: 1320917972 问题答案: 解决方案是:

  • 我需要能够将从存储在“日期时间”字段中的MySQL数据库中获取的数据转换为Java对象。 我遇到的问题是将本地时间偏移量添加到对象,我不需要它,因为日期时间已经以UTC格式存储在数据库中。所以当我运行以下代码时: 我得到: 我需要时间部分保持不变。 我找不到任何明显的解决问题的方法,所以我在这里错过了什么吗?