在JAVA中解析RFC 2822的日期

Chr*_*row 15 java parsing date rfc2822

我需要在Java中解析日期的RFC 2822字符串表示.这里有一个示例字符串:

星期六,2010年3月13日11:29:05 -0800

它看起来很讨厌,所以我想确保我做的一切都正确,并且会在以后通过AM-PM /军事时间问题,UTC时间问题,我没有预料到的问题等解释错误而遇到奇怪的问题等等. ...

谢谢!

Buh*_*ndi 21

这是快速代码,可以满足您的要求(使用SimpleDateFormat)

String rfcDate = "Sat, 13 Mar 2010 11:29:05 -0800";
String pattern = "EEE, dd MMM yyyy HH:mm:ss Z";
SimpleDateFormat format = new SimpleDateFormat(pattern);
Date javaDate = format.parse(rfcDate);

//Done.
Run Code Online (Sandbox Code Playgroud)

PS.我没有在这里处理异常和并发(因为解析日期时SimpleDateFormat不同步).


Lau*_* VB 20

如果您的应用程序使用的是除英语之外的其他语言,则可能需要使用备用的SimpleDateFormat构造函数强制语言环境进行日期解析/格式化:

String pattern = "EEE, dd MMM yyyy HH:mm:ss Z";
SimpleDateFormat format = new SimpleDateFormat(pattern, Locale.ENGLISH);
Run Code Online (Sandbox Code Playgroud)

  • 绝对需要设置区域设置.Locale的android javadoc建议使用Locale.US进行计算机到计算机的通信.[链接](https://developer.android.com/reference/java/util/Locale.html) (4认同)
  • @AdamTuttle如果您希望在默认语言环境不是美国英语时正确解析日期,则需要这样做.例如,如果用户在德国,则日期将无法使用其默认语言环境正确解析. (2认同)

小智 6

请记住,[星期几","]在RFC-2822中是可选的,因此建议的示例并未涵盖所有RFC-2822日期格式.另外,RFC-822日期类型允许许多不同的时区符号(obs-zone),"Z"格式说明符不包括这些符号.

我想没有简单的方法,除了寻找","和" - | +"来确定使用哪种模式.

  • +1表示星期几是可选的.我正在建立一个具有各种模式的尝试/捕获的瀑布,以便继续尝试变化,直到找到有效的变体. (2认同)

归档时间:

查看次数:

12835 次

最近记录:

6 年,8 月 前