我正在尝试使用java的SimpleDateFormat解析一组日期。例如:
2015-05-05T13:53:00.0000000
2015-05-05T09:38:00.0000000
2015-05-05T00:33:00.0000000
2015-05-04T18:18:00.0000000这是我到目前为止使用的yyyy-MM-dd'T'HH:mm:ss.SSS'0000'模式,但是它会导致对这些日期的解析异常。如何使用SimpleDateFormat解析这些日期?
我知道我可能会删除尾随的零,但在解析之前,我不希望操纵日期字符串。
下面是这个问题的一个示例测试:
import java.util.ArrayList;
import java.util.List;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.text.ParseException;
public class Test {
public static Date getDate(String value, String format) throws ParseException {
SimpleDateFormat df = new SimpleDateFormat(format);
return df.parse(value);
}
public static List<Date> getDates(List<String> values, String format) throws ParseException {
List<Date> dates = new ArrayList<Date>();
for(String s : values) {
dates.add(getDate(s, format));
}
return dates;
}
public static void main(String... args) {
List<String> dates = new ArrayList<String>();
dates.add("2015-05-05T13:53:00.0000000");
dates.add("2015-05-05T09:38:00.0000000");
dates.add("2015-05-05T00:33:00.0000000");
dates.add("2015-05-04T18:18:00.0000000");
String format = "yyyy-MM-dd'T'HH:mm:ss.SSS'0000'";
try {
getDates(dates, format);
} catch(ParseException ex) {
System.out.println("exception parsing with " + format);
System.out.println(ex);
}
}
}发布于 2015-05-05 16:34:06
忽略毫秒:
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");问题是S被指定为ms,实际上它是秒的小数部分。现在,在.之后扫描一个数字,并以毫秒的形式添加到日期。
或者,java 8值得研究。
因为您正在使用ISO标准。java 8变得非常简洁:
LocalDateTime datetime = LocalDateTime.parse("2015-05-05T13:53:00.9990000");这将再次产生"2015-05-05T13:53:00.999“- Java 8解决了ms的解释!
发布于 2015-05-05 16:14:33
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS");
Date date = sdf.parse("2015-05-04T18:18:00.0000000");
System.out.println(date);上面的代码给出了Mon May 04 18:18:00 CEST 2015。
SimpleDateFormater总是从前面分析到格式的末尾(你给了他)。所以,SimpleDateFormater不需要额外的零。
https://stackoverflow.com/questions/30057942
复制相似问题