我想将长格式的毫秒转换为格里高利历。 通过在网上搜索,我使用下面的代码:
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。我想知道是否有任何解决方案可以修改它,或者不建议将时间转换为公历。非常感谢!
答案 0 :(得分:0)
问题其实非常简单, 使用
修改SimpleDateFormat(“yyyy-MM-dd,HH:MM”,Locale.US)SimpleDateFormat(“yyyy-MM-dd,HH:mm”,Locale.getDefault());
将解决问题
答案 1 :(得分:0)
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 类而不是那些麻烦的遗留类。
将自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/Montreal
,Africa/Casablanca
或Pacific/Auckland
。切勿使用诸如EST
或IST
之类的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 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?