首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SimpleDateFormat解析10^-7

使用SimpleDateFormat解析10^-7
EN

Stack Overflow用户
提问于 2015-05-05 16:01:39
回答 2查看 148关注 0票数 2

我正在尝试使用java的SimpleDateFormat解析一组日期。例如:

代码语言:javascript
复制
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解析这些日期?

我知道我可能会删除尾随的零,但在解析之前,我不希望操纵日期字符串。

下面是这个问题的一个示例测试:

代码语言:javascript
复制
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);
        }
    }
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-05 16:34:06

忽略毫秒:

代码语言:javascript
复制
SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");

问题是S被指定为ms,实际上它是秒的小数部分。现在,在.之后扫描一个数字,并以毫秒的形式添加到日期。

或者,java 8值得研究。

因为您正在使用ISO标准。java 8变得非常简洁:

代码语言:javascript
复制
    LocalDateTime datetime = LocalDateTime.parse("2015-05-05T13:53:00.9990000");

这将再次产生"2015-05-05T13:53:00.999“- Java 8解决了ms的解释!

票数 2
EN

Stack Overflow用户

发布于 2015-05-05 16:14:33

代码语言:javascript
复制
    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不需要额外的零。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30057942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档