从毫秒转换为日期字符串

Convert from Millisecond to String of Date

我尝试将毫秒转换为日期字符串。然而,结果并不如我所料。

输入为毫秒(例如: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;
}

基于@phlaxyr,我已经解决了我的问题。您可以在下面的link

中获取您的时区

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;
}

很好, I just like to add an approach with Java 8 new java.time API. The old classes (Date, Calendar and SimpleDateFormat) have lots of problems and design issues,强烈建议尽可能切换到新的API。

如果您使用 Java <= 7,您可以使用 ThreeTen Backport, a great backport for Java 8's new date/time classes. And for Android, you'll also need the ThreeTenABP (more on how to use it ).

下面的代码适用于两者。 唯一的区别是包名称(在 Java 8 中是 java.time,在 ThreeTen Backport(或 Android 的 ThreeTenABP)中是 org.threeten.bp),但是 classes 和方法 names 相同。

要将毫秒值转换为特定时区,您可以使用 Instant class,然后使用 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,这个字母表示 clock-hour-of-am-pm 字段(值从 1 到 12),所以没有 AM/PM 指标,它可以模棱两可。也许您想添加 AM/PM 字段(将字母 a 添加到格式模式),或将小时数更改为 HH 小时数 , 值从 0 到 23).

另请注意ZonedDateTime的实际值为2017-10-17T13:16:40.485+11:0001:16 PM),因为在10月17日 th 2017, Sydney is in Daylight Saving Time, 所以实际偏移量是+11:00.