首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >日期格式解析字符串java

日期格式解析字符串java
EN

Stack Overflow用户
提问于 2016-08-19 10:53:01
回答 3查看 852关注 0票数 0

我有个功能:

代码语言:javascript
运行
复制
    public boolean isValidDate(String inDate) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:sssZ");
        dateFormat.setLenient(false);
    try {
      dateFormat.parse(inDate.trim());
    } catch (ParseException pe) {
      return false;
    }
    return true;
  }

我需要验证string:'2015-01-06T10:51:26.227+0100‘是date,但是funtion总是返回false。有人能告诉我我的dateDormat:"yyyy-MM-dd'T'HH:mm:sssZ"是否正确吗?我读过很多关于格式化日期的问题,但我认为我的dateFormat仍然不正确。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-08-19 10:59:55

我想格式的:sss部分是不正确的。那将是3秒,没有米利斯和一个丢失的点。

应该是

代码语言:javascript
运行
复制
yyyy-MM-dd'T'HH:mm:ss.SSSZ

要调试这一点:让格式化程序格式化当前日期,然后查看输出,看看它是否与您试图解析的内容相匹配。

以上模式实际上取自SimpleDateFormat -示例部分。

在Java8中,您应该使用新的日期/时间类,如答案中所描述的那样。

票数 3
EN

Stack Overflow用户

发布于 2016-08-19 11:05:03

错误

  • 丢失毫秒S
  • 秒和毫秒之间的缺点.
  • 输入3秒s

您的格式应该是

代码语言:javascript
运行
复制
yyyy-MM-dd'T'HH:mm:ss.SSSZ
票数 4
EN

Stack Overflow用户

发布于 2016-08-19 15:58:22

tl;dr

不需要格式化模式。

代码语言:javascript
运行
复制
java.util.Date utilDate = java.util.Date.from( OffsetDateTime.parse( "2015-01-06T10:51:26.227+0100" ).toInstant() );

对于无效的输入,请捕获DateTimeParseException

java.time

其他答案是正确的,但使用过时的课程。麻烦的旧式日期-时间类已经被java.time类所取代。

您的输入字符串采用标准ISO 8601格式。默认情况下,java.time使用ISO8601格式来解析和生成字符串。因此需要指定一个解析模式。

您的输入在末尾有一个与UTC的偏移量。所以解析作为一个OffsetDateTime

代码语言:javascript
运行
复制
OffsetDateTime odt = OffsetDateTime.parse( "2015-01-06T10:51:26.227+0100" );

捕获DateTimeParseException将指示输入数据无效。

如果必须有一个java.util.Date对象,以便与尚未更新的java.time类型旧代码一起使用,则可以进行转换。寻找添加到旧类中的新方法,以方便转换。

代码语言:javascript
运行
复制
java.util.Date utilDate = java.util.Date.from( odt.toInstant() ) ;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39037223

复制
相关文章

相似问题

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