在 Java 中将时间戳(以毫秒为单位)转换为字符串格式的时间

2022-08-31 07:54:07

我正在尝试将长值(从1/1/1970即Epoch经过的毫秒数)转换为格式化时间。h:m:s:ms

我用作时间戳的长值,我从log4j的日志记录事件的字段中获取。timestamp

到目前为止,我已经尝试了以下方法,但失败了:

logEvent.timeStamp/ (1000*60*60)
TimeUnit.MILLISECONDS.toMinutes(logEvent.timeStamp)

但我得到不正确的值:

1289375173771 for logEvent.timeStamp
358159  for logEvent.timeStamp/ (1000*60*60) 
21489586 for TimeUnit.MILLISECONDS.toMinutes(logEvent.timeStamp)

我该怎么做?


答案 1

试试这个:

Date date = new Date(logEvent.timeSTamp);
DateFormat formatter = new SimpleDateFormat("HH:mm:ss.SSS");
formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
String dateFormatted = formatter.format(date);

有关该类接受的其他格式字符串的说明,请参阅 SimpleDateFormat

请参阅使用 1200 ms 输入的可运行示例


答案 2
long millis = durationInMillis % 1000;
long second = (durationInMillis / 1000) % 60;
long minute = (durationInMillis / (1000 * 60)) % 60;
long hour = (durationInMillis / (1000 * 60 * 60)) % 24;

String time = String.format("%02d:%02d:%02d.%d", hour, minute, second, millis);