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

使用Java 8 Time将时间从一个时区转换到另一个时区

秦安宁
2023-03-14
String inputDate = "2015/04/30 13:00";
DateTimeFormatter sourceFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm", Locale.US);
LocalDateTime local = LocalDateTime.parse(inputDate, sourceFormatter);
// local : 2015-04-30T13:00
//Combining this local date-time with a time-zone to create a ZonedDateTime. 
ZonedDateTime zoned = local.atZone(TimeZone.getTimeZone("GMT+5:30").toZoneId());
// zoned : 2015-04-30T13:00+05:30[GMT+05:30]
ZonedDateTime zonedUS = zoned.withZoneSameInstant(TimeZone.getTimeZone("GMT-5:00").toZoneId());
// zonedUS : 2015-04-30T02:30-05:00[GMT-05:00]

我期待3:30 am Est但我得到的是2:30 am Est作为1PM ist=3:30 am Est。我错过了什么?

共有1个答案

胡新
2023-03-14

似乎您发现的任何服务都在解释您的意思和假设北美东部夏令时(EDT),当您指定EST(东部标准时间)时,都是过度有用的。大多数(不是所有)使用EST作为标准时间的地方使用夏令时,因此在您使用的日期2015年4月30日是EDT或偏移UTC-04:00。

如果在您的情况下有意义,您应该总是倾向于以区域/城市格式给出时区,如亚洲/加尔各答和美洲/纽约。如果你打算在纽约或蒙特利尔的东部时间,人们可能会说你的GMT-5:00的“时区”是错误的,以及导致你意想不到的结果的原因。

因此您的代码变成例如:

    String inputDate = "2015/04/30 13:00";
    DateTimeFormatter sourceFormatter = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm", Locale.US);
    LocalDateTime local = LocalDateTime.parse(inputDate, sourceFormatter);
    // local : 2015-04-30T13:00
    //Combining this local date-time with a time-zone to create a ZonedDateTime. 
    ZonedDateTime zoned = local.atZone(ZoneId.of("Asia/Kolkata"));
    // zoned : 2015-04-30T13:00+05:30[Asia/Kolkata]
    ZonedDateTime zonedUS = zoned.withZoneSameInstant(ZoneId.of("America/Montreal"));
    // zonedUS : 2015-04-30T03:30-04:00[America/Montreal]
 类似资料:
  • 问题内容: 具体来说,给定服务器的时区(系统时间角度)和时区输入,我如何计算系统时间,就像它在那个新时区中一样(无论夏时制如何)? 问题答案: 如果知道您的原始时区和要将其转换为的新时区,那么结果将非常简单: 为当前时区和新时区都创建一个对象,例如。如果您不知道时区的官方名称,只需拨打以下电话即可找到所有官方时区的列表 呼叫使用当前时区的pytz对象与你的日期时间/时间戳输入到它定位到当前时区。例

  • 问题内容: 基本上,我需要的是一个脚本,该脚本在提供时间和时区时可以返回另一个时区中的时间。 我的主要问题是: 从哪里获取GMT的时间偏差-是否有公共数据库可用于此? 如何也考虑夏时制(DST)的差异。 如何将其全部包装到PHP类中?或者是否已有这样的类? 问题答案: format('Y-m-d H:i:sP') . "\n"; 上面的示例将输出: 编辑:就像Pekka所说的:DateTime类从

  • 问题内容: 我已编写此代码将当前系统日期和时间转换为其他时区。我没有收到任何错误,但没有得到预期的输出。就像我在特定时间执行程序一样。我的输出是:: 当前 印度 时间是:: :: 中部标准时间 的日期和 时间 是:: 根据 CST时区 的实际时间是:: 所以有一些 时间间隔 。而且我不知道为什么会这样。任何帮助将不胜感激..代码是:: 问题答案: 通过网络。可以用谷歌搜索。无论如何,这是一个适合您

  • 这里是一个测试用例,它生成的一个结果是IST,另一个结果是GMT。我认为这两种情况下都应该只生成GMT。

  • 问题内容: 法国说如何将时区中的当前时间(日期时间)转换为另一个时区?我在SO中环顾四周,但没有找到任何可以帮助我的帖子。我正在使用SQL Server 2008。 问题答案: 在这里检查

  • 问题内容: 如何将这样的日期(在时区中)转换为时区?确保夏令时能正确处理? 问题答案: 使用和。