如何在Java中将UTC时间转换为本地时间?

时间:2012-11-09 20:45:43

标签: java time

我有时间来自1352437114052格式的gpslocation服务。有人可以告诉我如何在Java或Matlab或Excel中将其转换为本地时间。

6 个答案:

答案 0 :(得分:4)

这是一个epoch time,它代表星期五,2012年11月9日04:58:34 GMT。此数值是绝对时间点,与时区无关。

如果您想在不同时区看到该时间点,请使用GregorianCalendar

Calendar c = new GregorianCalendar(TimeZone.getTimeZone("EST"));
c.setTimeInMillis(1352437114052L);
c.get(Calendar.HOUR_OF_DAY); //20:58 the day before

答案 1 :(得分:3)

从epoch开始,从你的毫秒开始创建一个新的Date。然后使用DateFormat在所需的时区中对其进行格式化。

Date date = new Date(1352437114052L);
DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
format.setTimeZone(TimeZone.getTimeZone("PST"));
System.out.println(format.format(date));

答案 2 :(得分:0)

@Steve Kuo几乎直接回答了这个问题。这是计算机本地时间的更通用的解决方案,包括夏令时,其中#!/usr/bin/perl $|=1; my $warning_message_to_drop_reg = qr/constant subroutine.+redefined|prototype mismatch|^\s+at\s+\/\w+/i; while (<STDIN>) { my $message = $_; next if ($message =~ /$warnings_message_to_drop_reg/); # You should add custom code here, to write to other locations, if desired # If you log your session id, you can grab it here to decide what to do. print $message; # Goes to normal apache error log } 的类型为aBasicFileAttributes期间从public FileVisitResult visitFile(Path f, BasicFileAttributes a)中的Windows目录条目报告:

Files.walkFileTree

答案 3 :(得分:0)

long timeStamp = System.currentTimeMillis();
System.out.println(timeStamp+"");

Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getDefault());
calendar.setTimeInMillis(timeStamp);

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a z");
String dateString = sdf.format(calendar.getTime());
System.out.println(dateString);

输出:

timestamp : 1528860439258

dateformat from sdf : 2018-06-12 08:27:19 PM PDT

答案 4 :(得分:0)

使用JVM时区设置的现代Java答案(通常与计算机的时区相同):

        long time = 1_352_437_114_052L;
        ZonedDateTime dateTime = Instant.ofEpochMilli(time).atZone(ZoneId.systemDefault());
        System.out.println(dateTime);

在我的电脑上运行

  

2012-11-09T05:58:34.052 + 01:00 [欧洲/哥本哈根]

指定时区:

        ZonedDateTime dateTime = Instant.ofEpochMilli(time).atZone(ZoneId.of("Asia/Almaty"));
  

2012-11-09T10:58:34.052 + 06:00 [亚/阿拉木图]

问题:这也适用于Android吗?

回答tinker’s comment here:是的。我正在使用java.time,现代Java日期和时间API,它适用于较旧和较新的Android设备。它只需要至少Java 6

  • 在Java 8及更高版本和更新的Android设备上(来自API级别26,我被告知)现代API内置。
  • 在Java 6和7中获取ThreeTen Backport,新类的后端端口(适用于JSR 310的ThreeTen;请参阅底部的链接)。
  • On(较旧)Android使用Android版的ThreeTen Backport。它被称为ThreeTenABP。并确保使用子包从org.threeten.bp导入日期和时间类。

链接

答案 5 :(得分:0)

由于 new Date(String string) 现在已弃用(这是公认的答案),我们可以使用 DateTimeZone.getDefault() 获取系统时区

  public String getZonedDate(String dateStr) {
    DateTime utcDateTime = new DateTime(dateStr).toDateTime(DateTimeZone.UTC);
    return  utcDateTime
        .toDateTime(DateTimeZone.getDefault()).toString("yyyy-MM-dd'T'HH:mm:ss");
  }