Java Date解析"am"和"pm"

mti*_*cal 4 java simpledateformat

使用SimpleDateFormat,如何解析字符串:"2013-05-23T09:18:07 pm.380 + 0000"

我的所有SimpleDateFormat字符串都在"pm"部分绊倒.

提前致谢.

编辑:我们无法控制进入的格式.

我试过了:

"yyyy-MM-dd'T'HH:mm:ss a.a..SSSZ"

"yyyy-MM-dd'T'HH:mm:ss aaaa.SSSZ"

"yyyy-MM-dd'T'HH:mm:ss a.'m'..SSSZ"

"yyyy-MM-dd'T'HH:mm:ss a.'m.'.SSSZ"

"yyyy-MM-dd'T'HH:mm:ss a.'m..'SSSZ"

"yyyy-MM-dd'T'HH:mm:ss aa'm'..SSSZ"

"yyyy-MM-dd'T'HH:mm:ss aa'm.'.SSSZ"

"yyyy-MM-dd'T'HH:mm:ss aaa'..'SSSZ"

"yyyy-MM-dd'T'HH:mm:ss aaa.'.'SSSZ"

"yyyy-MM-dd'T'HH:mm:ss aaa'.'.SSSZ"
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 13

目前尚不清楚"380 + 0000"部件是什么意思,但您可以通过设置DateFormatSymbols为" 固定"来修复AM/PM部件SimpleDateFormat.这是一个例子:

import java.util.*;
import java.text.*;

public class Test {
    public static void main(String[] args) throws Exception {
        String text = "2013-05-23T09:18:07 p.m..380+0000";
        String pattern = "yyyy-MM-dd'T'hh:mm:ss aa'.380+0000'";

        SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.US);
        format.setTimeZone(TimeZone.getTimeZone("UTC"));

        DateFormatSymbols symbols = format.getDateFormatSymbols();
        symbols = (DateFormatSymbols) symbols.clone();
        symbols.setAmPmStrings(new String[] { "a.m.", "p.m."});
        format.setDateFormatSymbols(symbols);

        Date date = format.parse(text);
        System.out.println(date);
    }
}  
Run Code Online (Sandbox Code Playgroud)

我不知道你是否必须DateFormatSymbols在变异之前克隆它 - 它不清楚,说实话...... 文档指出了两种方式:

DateFormatSymbols对象是可复制的.获取DateFormatSymbols对象时,可以随意修改日期时格式化数据.例如,您可以将本地化的日期时间格式模式字符替换为您容易记住的字符.或者您可以将代表性城市更改为您喜欢的城市.

鉴于它提到了克隆,这表明你应该克隆 - 但随后的段落建议不要:(

  • @meewoK:哇 - 在上午/下午指示符之后的几毫秒*是真的*奇怪.这是一种非常奇怪的格式...... (2认同)