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

转换LocalDateTime UTC到欧洲/罗马给我错误的结果

巩光誉
2023-03-14

我试图寻找同样的问题,但没有找到我做错了什么。

我需要将UTC LocalDateTime转换为Europe/Roman LocalDateTime。我正在遵循我在SO上找到的这种方法,但我有一个错误的结果:

ZonedDateTime zonedDateTime = LocalDateTime.of(2020, 01, 01, 15, 0, 0).atZone(ZoneId.of("UTC"));
System.out.println(zonedDateTime);
ZonedDateTime current = zonedDateTime.withZoneSameInstant(ZoneId.systemDefault());
System.out.println(current);
System.out.println(current.toLocalDateTime());

我预计“转换时间”为17:00,但我得到了这个结果。

2020-01-01T15:00Z[UTC]
2020-01-01T16:00+01:00[Europe/Rome]
2020-01-01T16:00

谢谢

共有1个答案

常元章
2023-03-14

我预计“转换时间”为17:00,但我得到了这个结果。

我不知道你为什么会这么想。正确答案是16:00。

也许你错过了这是在januari,当欧洲大陆在冬季时间,比UTC早1小时。

1月1日15:00:00 UTC时间意味着在罗马是1小时。这里不可能得到17:00:00。也许可以试试夏季约会。那会给你两个小时的时差。

你的代码没有错。这正是如何做到这一点,这就是为什么它给你16:00:00(因为这是正确的答案)。

 类似资料:
  • 我正在尝试将罗马数字转换为阿拉伯数字。我取一个字符串并运行一个循环来检查每个字符的值。所以'M'将返回1000等。在罗马数字中,如果一个数字小于下一个,那么您需要减去它。所以'XL'或'10 50'将是40。这就是为什么我在for循环中有一个if语句,我在其中检查下一个字符并返回其值。稍后我将进行算术运算,但现在我只是尝试返回值。 我的问题是,它总是返回最后一个字符值两次。不管我输入2个字符还是1

  • 问题内容: 我需要将日期转换为2012-10-15 15:00:21.970的格式 前往欧洲:15/10/2012 15:00:21 前往美国:2012年10月15日下午03:00:21 我无法弄清楚美国转换的时间部分。我可能可以用DATEPART做到这一点,但是此函数将在select语句中格式化时间,因此我试图使其尽可能简单。有任何想法吗? 资源:http://www.w3schools.com

  • 问题内容: 考虑以下代码段: 从futureDate.toString()的打印输出为: ..... YEAR = 2011,MONTH = 11,WEEK_OF_YEAR = 43,WEEK_OF_MONTH = 4,DAY_OF_MONTH = 14,DAY_OF_YEAR = 289,DAY_OF_WEEK = 1,DAY_OF_WEEK_IN_MONTH = 3,AM_PM = 0,HOU

  • 问题内容: 我需要使用一种方法将整数转换为罗马数字。后来,我必须使用该程序以罗马数字写出1到3999,这样就可以进行硬编码了。我下面的代码非常简单;它是一个基本的I / O循环,可以在使用getIntegerFromUser我们在课堂上制作的程序包时退出。 当我调用该方法时,是否可以将值赋给字符串,然后将它们添加在一起? 更新:我从教授那里得到了一些伪代码来帮助我,而在我理解他要说的内容的同时,我

  • 问题内容: 我正在尝试制作一个采用字符串公式的方法,并通过以很小的间隔进行一次黎曼求和来解决该公式的积分问题。我正在使用ScriptEngine和ScriptEngineManager类评估函数(使用eval()方法)。由于某种原因,我收到此错误: 线程“主”中的异常java.lang.ClassCastException:无法将位于sum.main(sum.java:13)处sum.integr