在Java中将String datetime转换为Date?

moh*_*aki 0 java datetime

我正在尝试将这两个字符串转换为日期,并且无法获取异常。

“ 2015-12-03T15:00:08.868987”和“ 2015-12-03T17:00:08Z”。尝试了这两种格式“ yyyy-MM-dd'T'HH:mm:ss.SSSXXX”和“ yyyy-MM” -dd'T'HH:mm:ss.SSSZ“

    String s = "2015-12-03T17:00:08Z";
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    try
    {
        Date date = simpleDateFormat.parse(s);

        System.out.println("date : "+simpleDateFormat.format(date));
    }
    catch (ParseException ex)
    {
        System.out.println("Exception "+ex);
    }
Run Code Online (Sandbox Code Playgroud)

Nar*_*uto 5

原因是您使用的格式错误,此处Z代表时区

 String s = "2013-09-29T18:46:19-0700";
 SimpleDateFormat inFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
Run Code Online (Sandbox Code Playgroud)

如果时间格式在上面,则可以正常工作。如果仅将Z标记在单引号中,它将仅被视为一个String而不是对其进行解析。

编辑:-如果要使用“ 2015-12-03T15:00:08.8689870”,则模式必须为yyyy-MM-dd'T'HH:mm:ss.SSS

String s = "2015-12-03T15:00:08.8689870";
SimpleDateFormat inFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Run Code Online (Sandbox Code Playgroud)

如果日期时间为2015-12-03T17:00:08Z,则可以使用模式yyyy-MM-dd'T'HH:mm:ssX,其中X表示ISO 8601时区。Java7版本的SimpleDateFormat支持ISO- 8601时区使用大写字母X。

String s = "2015-12-03T17:00:08Z";
SimpleDateFormat inFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssX");
Date dtIn = inFormat.parse(s); 
Run Code Online (Sandbox Code Playgroud)

http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

如果您使用Java 6或更早版本,建议使用JodaTime的答案是安全的选择。

String timestamp = "2011-04-15T20:08:18Z";

DateTime dateTime = ISODateTimeFormat.dateTimeParser().parseDateTime(timestamp);
Run Code Online (Sandbox Code Playgroud)

这样可以正确识别UTC时区,并允许您使用Joda Time广泛的操作方法来获取所需的信息。