代码之家  ›  专栏  ›  技术社区  ›  Alex Crowel

从毫秒转换为日期字符串

  •  0
  • Alex Crowel  · 技术社区  · 7 年前

    1508206600485 )

    我的时区是 UTC +10:00

    ------Expected-------------------------------------------- Actual------
    
    01:32 (PM) 17/10/2017--------------------------------02:32 (PM) 17/10/2017
    

    public static String getDate(long milliSeconds) {
        SimpleDateFormat formatter = new SimpleDateFormat("hh:mm dd/MM/yyyy");
        String dateString = formatter.format(new Date(milliSeconds));
        return dateString;
    }
    
    2 回复  |  直到 7 年前
        1
  •  6
  •   user7605325 user7605325    7 年前

    you found a solution ,我只是想添加一种方法 Java 8 new java.time API Date , Calendar SimpleDateFormat )有 lots of problems design issues ,如果可能的话,强烈建议切换到新的API。

    如果您正在使用 Java<=7. ,您可以使用 ThreeTen Backport ,是Java 8新的日期/时间类的一个很好的后台端口。对于 安卓 ,您还需要 ThreeTenABP (更多关于如何使用它的信息 here

    下面的代码适用于这两种情况。 唯一的区别是包名(在Java 8中是 java.time 在ThreeTen Backport(或Android的ThreeTenABP)中 org.threeten.bp ),但类和方法 姓名 都是一样的。

    要将毫秒值转换为特定时区,可以使用 Instant 类,然后使用 ZoneId ZonedDateTime . 然后使用 DateTimeFormatter

    // convert millis value to a timezone
    Instant instant = Instant.ofEpochMilli(1508206600485L);
    ZonedDateTime z = instant.atZone(ZoneId.of("Australia/Sydney"));
    // format it
    DateTimeFormatter fmt = DateTimeFormatter.ofPattern("hh:mm dd/MM/yyyy");
    System.out.println(fmt.format(z)); // 01:16 17/10/2017
    

    输出为:

    01:16 17/10/2017

    注意,我使用了 hh According to javadoc ,此字母n表示 字段(值从1到12),因此如果没有AM/PM指示器,它可能不明确。也许你想添加AM/PM字段(添加字母 a 或将小时数更改为 HH ( 一天中的小时数 ,值为0到23)。

    还要注意的是 2017-10-17T13:16:40.485+11:00 ( 下午01:16 ),因为在10月17日 2017, Sydney is in Daylight Saving Time ,因此实际偏移为 +11:00 .

        2
  •  0
  •   Alex Crowel    7 年前

    基于@phlaxyr,我解决了我的问题。你可以在下面的链接中找到你的时区

    http://tutorials.jenkov.com/java-date-time/java-util-timezone.html

    public static String getDate(long milliSeconds) {
        SimpleDateFormat formatter = new SimpleDateFormat("hh:mm dd/MM/yyyy");
        formatter.setTimeZone(TimeZone.getTimeZone("Australia/Sydney"));
        String dateString = formatter.format(new Date(milliSeconds));
        return dateString;
    }