【问题标题】:Java DateFormat: How to deal with "st", "nd", "rd", "th"?Java DateFormat:如何处理“st”、“nd”、“rd”、“th”?
【发布时间】:2013-07-05 09:48:59
【问题描述】:

如何使用一些 DateFormat 解析这样的字符串?

7 月 24 日,星期三

据我所知,SimpleDateFormat 中什么都没有。

【问题讨论】:

  • 请花一些时间完整地写出您的缩写。写 AFAICT 而不是“据我所知”只是懒惰,而且会让试图帮助你的人更难真正帮助你,因为不是每个人都知道这意味着什么。
  • 好的,我会尽量记住的。但众所周知,它可以被视为一种语言结构而不是缩写,不像例如。 JVM。
  • 顺便说一句,这是一个首字母缩写词,仅供参考;-)
  • 我不得不用谷歌搜索它,我的评论得到了 5 个赞,所以这应该是一个合理的迹象,表明我不是唯一的一个;) 请记住下次。把你的话完整写出来比去查它的意思花费更少的时间和精力。
  • java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用它们并切换到modern Date-Time API。查看this page 了解如何使用现代日期时间 API 解决它。

标签: java date-format simpledateformat date-formatting


【解决方案1】:

试试这个

String str = "Wednesday, 24th July";
str = str.replaceAll("(\\d\\d)..", "$1") + " " + Calendar.getInstance().get(Calendar.YEAR);
Date date = new SimpleDateFormat("EEEE, dd MMMM yyyy", Locale.US).parse(str);

【讨论】:

  • 这就是我所做的。所以我有办法在一些 DateFormat impl 中捕捉“th”等。
  • 我们可以,作为 dd'th' 但是然后 'nd' 和其他人不会解析,似乎没有办法解决这个问题
  • 我认为会有一些像%X 这样的模式或者可以解析它的东西。好的,谢谢。
【解决方案2】:

任何不属于 DateFormat 解析器的文字都可以放在' 之间。比如'th'、'T'、'nd'、'st'

【讨论】:

    【解决方案3】:

    我的最佳想法是尝试四种不同的模式:

    EEEE, d'st' MMMM
    EEEE, d'nd' MMMM
    ...
    

    虽然如果其他格式是固定的,你可以很容易地滚动你自己的解析器。

    【讨论】:

      【解决方案4】:

      您正在尝试解析不是日期而是一天的内容。 Evgeniy Dorofeev 提出了一个很好的方法来解决这个问题。但如果你真的对解析一天感兴趣,你应该创建自己的 Day 类并支持 DayFormat 类。

      【讨论】:

      • 当然,我假设是今年。关键是,没有处理“st,nd”的格式化程序......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-25
      • 2015-10-11
      • 1970-01-01
      • 1970-01-01
      • 2012-11-17
      • 2021-04-07
      相关资源
      最近更新 更多