某些字符串的 DateFormat 模式
Posted
技术标签:
【中文标题】某些字符串的 DateFormat 模式【英文标题】:DateFormat Pattern for some strings 【发布时间】:2012-06-02 05:39:47 【问题描述】:我有一些不同格式的日期要解析,但我无法用SimpleDateFormat
识别它们。谁能帮我找到这个日期的模式:
和
公元前 63 年 9 月 23 日 14 年 8 月 19 日谢谢
【问题讨论】:
***.com/q/3850784/1140748 我第一次遇到一个关于在 BC 中指定的转换时间的问题 :) +1 好吧,它们都不是简单的日期格式 1892 年 7 月 6 日将类似于“d MMMM yyyy”。您将在 BC 中获得一些乐趣,并且是 1768-02-12 2 月 12 日或 12 月 2 日 另请注意,有些是不可能可靠解析的。 1768-02-12 可能意味着 2 月 12 日或 12 月 2 日。 美国真的应该“接受这个计划”:其他地方都使用“理智”yyyy-MM-dd
或dd-MM-yyyy
(注意它是如何从最大到最小,反之亦然)。美式格式就像把“五百四十三”写成534!
【参考方案1】:
在这里,您可以找到一个很棒的生成器,用于创建您可以想象的每种日期格式 http://www.fileformat.info/tip/java/simpledateformat.htm
例如您的前两个示例都是使用 dd MMMM yyyy 生成的;)
【讨论】:
这没有回答如何在 Java 中做到这一点 你只需要将生成的格式放入SimpleDateFormat()中 点击网站上的链接 (docs.oracle.com/javase/1.5.0/docs/api/java/text/…)。有一个描述如何在 bc 中转换。 "...在解析过程中,只有由 Character.isDigit(char) 定义的恰好包含两位数字的字符串才会被解析为默认世纪。任何其他数字字符串,例如一位数字字符串、三位或更多数字字符串,或不是所有数字的两位数字字符串(例如,“-1”),按字面意思解释。因此,使用相同的模式解析“01/02/3”或“01/02/003” ,如公元 3 年 1 月 2 日。同样,“01/02/-3”被解析为公元前 4 年 1 月 2 日。”【参考方案2】:Joda 如果您必须使用多种格式进行解析,通常会更好。例如,
private static DateTimeFormatter dateFormatter;
String[] validDateFormats = new String[] "dd-MMM-yyyy HH:mm:ss",
"yyyy-MM-dd HH:mm:ss.SSS" ;
DateTimeParser[] parsers = new DateTimeParser[validDateFormats.length];
for (int i = 0; i < validDateFormats.length; ++i)
parsers[i] = DateTimeFormat.forPattern(validDateFormats[i])
.getParser();
dateFormatter = new DateTimeFormatterBuilder().append(null, parsers)
.toFormatter().withZone(DateTimeZone.UTC);
现在,如果输入匹配任何格式,则此 dateFormatter 将正确解析:
inputDate = dateFormatter.parseDateTime(dateStr);
DateTimeFormatter outputFormat = DateTimeFormat
.forPattern("yyyy/MM/dd");
String outputString = inputDate.toString(outputFormat);
格式字符串可以从这里查到:http://joda-time.sourceforge.net/api-release/org/joda/time/format/DateTimeFormat.html
【讨论】:
【参考方案3】:您只需提供您希望您的日期被解析的模式的可能性,并通过它们找到第一个匹配项。
Run solution.
【讨论】:
你是最简单有效的解决方案 :) 我的问题是我不使用语言环境 .. 所以我认为它是用意大利语格式化的 :) 非英国/美国公民的常见问题,乐于提供帮助。【参考方案4】:试试这些
2012 年 5 月 27 日:
System.out.println(new SimpleDateFormat("d-MMM-YYYY").format(new Date()));
27-05-2012 :
System.out.println(new SimpleDateFormat("d-MM-YYYY").format(new Date()));
27-05-12 :
System.out.println(new SimpleDateFormat("dd-MM-YY").format(new Date()));
【讨论】:
以上是关于某些字符串的 DateFormat 模式的主要内容,如果未能解决你的问题,请参考以下文章
javaWEB国际化:DateFormat,NumberFormat,MessageFormat,ResourceBundle的使用