将milliSeconds转换为公历

时间:2014-11-07 05:18:04

标签: android time calendar gregorian-calendar

我想将长格式的毫秒转换为格里高利历。 通过在网上搜索,我使用下面的代码:

public static String getStringDate(int julianDate){
    GregorianCalendar gCal = new GregorianCalendar();
    Time gTime = new Time();
    gTime.setJulianDay(julianDate);
    gCal.setTimeInMillis(gTime.toMillis(false));
    String gString = Utils.getdf().format(gCal.getTime());
    return gString;
}

public static SimpleDateFormat getdf(){
    return new SimpleDateFormat("yyyy-MM-dd, HH:MM",Locale.US);
}

是的,代码有效,但我发现只有日期和小时是正确的,但会在几分钟内出错。如果事情发生在2014-11-06,14:00,它会给我2014-11-06,14:11。我想知道是否有任何解决方案可以修改它,或者不建议将时间转换为公历。非常感谢!

2 个答案:

答案 0 :(得分:0)

问题其实非常简单, 使用

修改SimpleDateFormat(“yyyy-MM-dd,HH:MM”,Locale.US)

SimpleDateFormat(“yyyy-MM-dd,HH:mm”,Locale.getDefault());

将解决问题

答案 1 :(得分:0)

TL;博士

Instant.ofEpochMilli( millis )                  // Convert count-from-epoch into a `Instant` object for a moment in UTC.
    .atZone( ZoneId.of( "Pacific/Auckland" ) )  // Adjust from UTC to a particular time zone. Same moment, different wall-clock time. Renders a `ZonedDateTime` object.
    .format(                                    // Generate a String in a particular format to represent the value of our `ZonedDateTime` object.
        DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd, HH:mm" )
    )

java.time

现代方法使用 java.time 类而不是那些麻烦的遗留类。

将自1970年第一时刻(1970-01-01T00:00Z)的纪元参考以来的毫秒数转换为Instant个对象。请注意,Instant能够实现更精细的纳秒级。

Instant instant = Instant.ofEpochMilli( millis ) ;

那一刻在UTC。要调整到其他时区,请应用ZoneId获取ZonedDateTime

时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。

如果未指定时区,则JVM会隐式应用其当前的默认时区。该默认值可能随时更改,因此您的结果可能会有所不同。最好明确指定您期望/预期的时区作为参数。

continent/region的格式指定proper time zone name,例如America/MontrealAfrica/CasablancaPacific/Auckland。切勿使用诸如ESTIST之类的3-4字母缩写,因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。

ZoneId z = ZoneId.of( "Africa/Tunis" ) ;
ZonedDateTime zdt = instant.atZone( z ) ;

使用DateTimeFormatter对象生成所需格式的字符串。

DateTimeFormatter f = DateTimeFormatter.ofPattern( "uuuu-MM-dd, HH:mm" , Locale.US ) ;
String output = zdt.format( f ) ;

关于 java.time

java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance mode项目建议迁移到java.time类。

要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310

从哪里获取java.time类?