72

我有一个日期格式的字符串,例如

Jun 13 2003 23:11:52.454 UTC

包含毫秒...我想在纪元中转换。我可以使用 Java 中的实用程序进行此转换吗?

4

5 回答 5

121

此代码显示如何使用java.text.SimpleDateFormat从字符串中解析java.util.Date :

String str = "Jun 13 2003 23:11:52.454 UTC";
SimpleDateFormat df = new SimpleDateFormat("MMM dd yyyy HH:mm:ss.SSS zzz");
Date date = df.parse(str);
long epoch = date.getTime();
System.out.println(epoch); // 1055545912454

Date.getTime()返回以毫秒为单位的纪元时间。

于 2011-07-14T01:25:15.980 回答
28

您还可以使用 Java 8 API

import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;

public class StackoverflowTest{
    public static void main(String args[]){
        String strDate = "Jun 13 2003 23:11:52.454 UTC";
        DateTimeFormatter dtf  = DateTimeFormatter.ofPattern("MMM dd yyyy HH:mm:ss.SSS zzz");
        ZonedDateTime     zdt  = ZonedDateTime.parse(strDate,dtf);        
        System.out.println(zdt.toInstant().toEpochMilli());  // 1055545912454  
    }
}

该类DateTimeFormatter替换旧的SimpleDateFormat. 然后,您可以创建一个ZonedDateTime从中提取所需的纪元时间。

主要优点是您现在是线程安全的。

感谢 Basil Bourque 的发言和建议。阅读他的答案以获取完整的详细信息。

于 2015-06-14T13:43:12.437 回答
17
于 2016-10-06T20:21:13.890 回答
0

创建将字符串转换为日期格式的常用方法

public static void main(String[] args) throws Exception {
    long test = ConvertStringToDate("May 26 10:41:23", "MMM dd hh:mm:ss");
    long test2 = ConvertStringToDate("Tue, Jun 06 2017, 12:30 AM", "EEE, MMM dd yyyy, hh:mm a");
    long test3 = ConvertStringToDate("Jun 13 2003 23:11:52.454 UTC", "MMM dd yyyy HH:mm:ss.SSS zzz");
}

private static long ConvertStringToDate(String dateString, String format) {
    try {
        return new SimpleDateFormat(format).parse(dateString).getTime();
    } catch (ParseException e) {}
    return 0;
}
于 2017-06-07T06:55:20.677 回答
0
  String dateTime="15-3-2019 09:50 AM" //time should be two digit like 08,09,10 
   DateTimeFormatter dtf  = DateTimeFormatter.ofPattern("dd-MM-yyyy hh:mm a");
        LocalDateTime zdt  = LocalDateTime.parse(dateTime,dtf);
        LocalDateTime now = LocalDateTime.now();
        ZoneId zone = ZoneId.of("Asia/Kolkata");
        ZoneOffset zoneOffSet = zone.getRules().getOffset(now);
        long a= zdt.toInstant(zoneOffSet).toEpochMilli();
        Log.d("time","---"+a);

您可以通过此链接获取区域 ID !

于 2019-03-22T08:02:17.317 回答