我在服务器中生成的某些日志文件中有毫秒,我也知道从中生成日志文件的语言环境,我的问题是将毫秒转换为指定格式的日期。该日志的处理在不同时区的服务器上进行。转换为“ SimpleDateFormat”时,程序将使用机器的日期,因为这种格式化的日期并不代表服务器的正确时间。有什么办法可以优雅地处理吗?
long yourmilliseconds = 1322018752992l; //1322018752992-Nov 22, 2011 9:25:52 PM SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS",Locale.US); GregorianCalendar calendar = new GregorianCalendar(TimeZone.getTimeZone("US/Central")); calendar.setTimeInMillis(yourmilliseconds); System.out.println("GregorianCalendar -"+sdf.format(calendar.getTime())); DateTime jodaTime = new DateTime(yourmilliseconds, DateTimeZone.forTimeZone(TimeZone.getTimeZone("US/Central"))); DateTimeFormatter parser1 = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss,SSS"); System.out.println("jodaTime "+parser1.print(jodaTime));
输出:
Gregorian Calendar -2011-11-23 08:55:52,992 jodaTime 2011-11-22 21:25:52,992
Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(timeStamp); int mYear = calendar.get(Calendar.YEAR); int mMonth = calendar.get(Calendar.MONTH); int mDay = calendar.get(Calendar.DAY_OF_MONTH);
你可以使用java.util.Dateclass,然后使用SimpleDateFormat格式化Date。
java.util.Dateclass
SimpleDateFormat
Date
Date date=new Date(millis);
我们可以使用java.time包(教程)-Java SE 8中引入的DateTime API。
var instance = java.time.Instant.ofEpochMilli(millis); var localDateTime = java.time.LocalDateTime .ofInstant(instance, java.time.ZoneId.of("Asia/Kolkata")); var zonedDateTime = java.time.ZonedDateTime .ofInstant(instance,java.time.ZoneId.of("Asia/Kolkata"));
// Format the date
var formatter = java.time.format.DateTimeFormatter.ofPattern("u-M-d hh:mm:ss a O"); var string = zonedDateTime.format(formatter);