为了账号安全,请及时绑定邮箱和手机立即绑定

解析日期时间字符串中日期的序号指示符(st,nd,rd,th)

解析日期时间字符串中日期的序号指示符(st,nd,rd,th)

qq_遁去的一_1 2019-10-22 21:32:35
我检查了SimpleDateFormatjavadoc,但无法找到一种解析日期格式的序号指示器的方法,如下所示: Feb 13th 2015 9:00AM我试过了"MMM dd yyyy hh:mma",但是天数必须正确才能正确?是否可以使用a解析“ 13th”日期SimpleDateFormat而不必截断字符串?
查看完整描述

3 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

Java 8答案(以及Java 6和7)(因为在2015年提出此问题时,SimpleDateFormat已经替换掉了):


    DateTimeFormatter parseFormatter = DateTimeFormatter

            .ofPattern("MMM d['st']['nd']['rd']['th'] uuuu h:mma", Locale.ENGLISH);

    LocalDateTime dateTime = LocalDateTime.parse(dateTimeString, parseFormatter);

根据问题的样本日期,得出:


2015-02-13T09:00

在格式模式中,[]表示可选部分,并''表示文字部分。所以图案说,数字可以跟随st,nd,rd或th。


要在Java 6或7中使用它,您需要ThreeTen Backport。或适用于Android ThreeTenABP。


由于这些后缀专用于英语,并且其他语言/语言环境在书写日期和时间方面也有其他用法(它们也不使用AM / PM),因此我相信除非您有其他要求,否则应尝试将其实现为仅英文日期和时间。另外,您应该明确指定英语为英语的语言环境,这样它将独立于计算机或JVM的语言环境设置而工作。


我试图将雨果和我本人的最佳答案组合成一个重复的问题。在那个重复的问题下,还有更多的Java 8答案。上面的代码的局限性在于它没有非常严格的验证:您Feb 13rd甚至可以避免使用甚至Feb 13stndrdth。


查看完整回答
反对 回复 2019-10-22
  • 3 回答
  • 0 关注
  • 2068 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信