Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将UTC时间戳转换为本地日期_Java_Datetime_Utc - Fatal编程技术网

Java 将UTC时间戳转换为本地日期

Java 将UTC时间戳转换为本地日期,java,datetime,utc,Java,Datetime,Utc,因此,我现在尝试了大约几个小时将时间戳转换为本地日期(CEST) 无论我在互联网上尝试和查找什么,它都不起作用。我总是能回到UTC时间 为了更好地理解:stamp是一个带有long类型的可变时间戳,我将从服务中接收它您的时区id可能不正确(Java无法识别)。在这种情况下,时区的计算结果似乎不是抛出异常,而是UTC 请尝试以下方法: simpleDateFormat.setTimeZone(TimeZone.getTimeZone("ECT")); 是一个页面,提供有关Java的时区的一些信息

因此,我现在尝试了大约几个小时将时间戳转换为本地日期(CEST)

无论我在互联网上尝试和查找什么,它都不起作用。我总是能回到UTC时间


为了更好地理解:stamp是一个带有long类型的可变时间戳,我将从服务中接收它

您的
时区
id可能不正确(Java无法识别)。在这种情况下,
时区
的计算结果似乎不是抛出异常,而是UTC

请尝试以下方法:

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("ECT"));

是一个页面,提供有关Java的
时区的一些信息和时区id列表。

您的
时区id可能不正确(Java无法识别)。在这种情况下,
时区
的计算结果似乎不是抛出异常,而是UTC

请尝试以下方法:

simpleDateFormat.setTimeZone(TimeZone.getTimeZone("ECT"));
是一个页面,提供有关Java的
时区的一些信息和时区ID列表。

tl;博士 细节 几个问题:

  • 您没有使用。
    • 专有名称采用
      大陆/地区
      格式
    • 在诸如
      CEST
      等媒体中常见的3-4个字母的缩写不是真正的时区避免它们。它们既不是标准化的,也不是唯一的(!)
  • 您使用的是过时的日期时间类,这些类设计糟糕且容易混淆。它们已被框架所取代
如果您所说的CEST
是指夏季比UTC提前2小时,那么让我们以时区为例。你的问题缺少示例数据,所以我将补足这个示例

显然,您的输入是从UTC 1970年第一个时刻开始的整秒计数。该值可以直接使用,无需乘法

ZoneId
类表示时区。
即时
是UTC时间线上的一个点,分辨率高达纳秒。
ZonedDateTime
是调整到
ZoneId
中的
Instant

ZoneId zoneId = ZoneId.of ( "Europe/Paris" );
long input = 1_468_015_200L;   // Whole seconds since start of 1970.
Instant instant = Instant.ofEpochSecond ( input );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
转储到控制台

System.out.println ( "input: " + input + " | instant: " + instant + " | zdt: " + zdt );
输入:1468015200 |即时:2016-07-08T22:00:00Z | zdt:2016-07-09T00:00+02:00[欧洲/巴黎]

tl;博士 细节 几个问题:

  • 您没有使用。
    • 专有名称采用
      大陆/地区
      格式
    • 在诸如
      CEST
      等媒体中常见的3-4个字母的缩写不是真正的时区避免它们。它们既不是标准化的,也不是唯一的(!)
  • 您使用的是过时的日期时间类,这些类设计糟糕且容易混淆。它们已被框架所取代
如果您所说的CEST
是指夏季比UTC提前2小时,那么让我们以时区为例。你的问题缺少示例数据,所以我将补足这个示例

显然,您的输入是从UTC 1970年第一个时刻开始的整秒计数。该值可以直接使用,无需乘法

ZoneId
类表示时区。
即时
是UTC时间线上的一个点,分辨率高达纳秒。
ZonedDateTime
是调整到
ZoneId
中的
Instant

ZoneId zoneId = ZoneId.of ( "Europe/Paris" );
long input = 1_468_015_200L;   // Whole seconds since start of 1970.
Instant instant = Instant.ofEpochSecond ( input );
ZonedDateTime zdt = ZonedDateTime.ofInstant ( instant , zoneId );
转储到控制台

System.out.println ( "input: " + input + " | instant: " + instant + " | zdt: " + zdt );
输入:1468015200 |即时:2016-07-08T22:00:00Z | zdt:2016-07-09T00:00+02:00[欧洲/巴黎]



这应该会有帮助:正如您可能看到的,我以11票赞成的票数尝试了这个建议,它不起作用。我没有使用Java8,正在使用Java6EE@Nali您应该发布示例数据和结果,以便我们进行验证。这应该会有所帮助:正如您可能看到的,我尝试了11次投票的建议,它不起作用尝试我没有使用Java 8,在Java6上工作EE@Nali您应该发布示例数据和结果,以便我们进行验证。我尝试了所有方法,它只会显示UTC时间,什么都没有else@Nali你所说的一切到底是什么意思?您是否尝试过
大陆/地区
格式<代码>SimpleDataFormat.setTimeZone(TimeZone.getTimeZone(“欧洲/布鲁塞尔”)用于example@Nali
TimeZone.getAvailableIDs()
返回什么?不管怎样,你应该使用这些值中的一个。不管它现在起作用了,我不知道为什么但它起作用了:D谢谢我尝试了一切它只会告诉我UTC时间什么都没有else@Nali你所说的一切到底是什么意思?您是否尝试过
大陆/地区
格式<代码>SimpleDataFormat.setTimeZone(TimeZone.getTimeZone(“欧洲/布鲁塞尔”)用于example@Nali
TimeZone.getAvailableIDs()
返回什么?不管怎样,你应该使用这些值中的一个。不管它现在起作用,我不知道为什么它起作用:Dthanks@Nali您是指表示日期时间值的字符串格式吗?你的问题没有提到格式。无论如何,在堆栈溢出中搜索许多使用
DateTimeFormatter
生成任何格式字符串的示例。此处显示的格式符合ISO 8601标准。您可以指定其他格式,或者让java.time自动本地化为任何
语言环境
@BasilBourque,如OP尚未使用java 8的注释中所述。我不知道他的限制是什么,但我想他目前必须解决这个问题。@C.champan大多数java.time功能在项目中被移植到java 6和7,并在ThreeTenABP项目中进一步适应Android。这些名称来自定义java.time的JSR310。@BasilBourque很棒!我不知道。谢谢@Nali您是指表示日期时间值的字符串格式吗?你的问题没有提到格式。无论如何,在堆栈溢出中搜索许多使用
DateTimeFormatter
生成任何格式字符串的示例。此处显示的格式符合ISO 8601标准。您可以指定其他格式,或者让java.time自动本地化为任何
语言环境
@BasilBourque,如OP尚未使用java 8的注释中所述。我不