我需要存儲發送電子郵件的時區。從電子郵件的'Date:'標題(RFC822日期)中提取它的最佳方法是?什麼是建議格式存儲在數據庫中(我使用休眠)?從郵件中提取時區的最佳方式Java中的日期標題?
回答
使用某種子串或正則表達式從頭中提取數據。使用SimpleDateFormatter解析日期以創建Date對象。
可能最容易與JodaTime解析,因爲它支持ISO8601請參閱Date and Time Parsing and Formatting in Java with Joda Time。
DateTimeFormatter parser2 = ISODateTimeFormat.dateTimeNoMillis();
System.out.println(parser2.parseDateTime(your_date_string));
時間必須始終保存在UTC(GMT)與時區 - 即分析從時區到GMT轉換和刪除夏令偏移並保存原始時區後。
轉換爲UTC後,您必須將時間存儲在時區中。
如果您刪除或不處理時區,則在處理來自不同時區的數據時會導致問題。
**錯誤!**只要它是正確的,並且使用像喬達這樣的現代日期時間庫,它可以更好地將DateTime *與*時區一起存儲。這是處理時區。通過丟棄時區並標準化爲UTC,可以減少對用戶有用的數據,尤其是在移動/全球應用程序的情況下。 **另外SimpleDateFormat不是線程安全的!** ...我被誘惑到-1你。 – 2012-07-27 14:49:21
@AdamGent這就是我所說的「如果你刪除或不處理它可能導致問題的時區...」。我會編輯以使這個晶瑩剔透。 – 2012-07-27 21:14:27
請刪除博客文章too或atl注意製作simpledateformat公共靜態數組的嚴重併發危險。 – 2012-07-28 14:34:37
電子郵件中的時區不會顯示它發送的時區。某些程序使用UTC或GMT。當然,時區是日期時間值的一部分,也必須解析。
爲什麼你想知道它。 - 你想標準化時間戳嗎?然後使用DateFormat解析它。 - 你想檢測發送郵件的用戶的時間表嗎?這將無法正常工作。
看起來你已經在你的一個評論中提到了這個,但我認爲這是你的最佳答案。 JavaMail庫在javax.mail.internet.MailDateFormat
中包含RFC822 Date標頭解析代碼。不幸的是,它不直接公開TimeZone解析,因此您需要直接從javax.mail.internet.MailDateParser
複製必要的代碼,但值得充分利用已經完成的仔細工作。
至於存儲它,解析器會給你一個偏移量的日期,所以你應該可以把它存儲得很好,就像一個int
(讓Hibernate將它翻譯成你的數據庫)。
我建議您使用Mime4J。
該庫是專爲解析各種電子郵件垃圾。 對於解析日期,您可以使用其DateTimeParser。
int zone = new DateTimeParser(new StringReader("Fri, 27 Jul 2012 09:13:15 -0400")).zone();
之後,我通常的日期時間轉換爲Joda's DateTime。不要使用SimpleDateFormatter,因爲它不涵蓋RFC822的所有情況。
下面將爲您展示優於Java的TZ的Joda TimeZone(來自上面的int區域)。
// Stupid hack in case the zone is not in [-+]zzzz format
final int hours;
final int minutes;
if (zone > 24 || zone < -24) {
hours = zone/100;
minutes = minutes = Math.abs(zone % 100);
}
else {
hours = zone;
minutes = 0;
}
DateTimeZone.forOffsetHoursMinutes(hours, minutes);
現在唯一的問題是,時區你會得到永遠是這可能仍然不是用戶發送電子郵件的正確的時區一個數字時區(假設郵件應用程序發送的用戶TZ和不僅僅是UTC)。
例如,-0400不是EDT(即America/New_York),因爲它不考慮夏令時節省的費用。
- 1. 從Python中的字符串中提取日期時間的最佳方法
- 2. 在java中表示日期的最佳方式
- 3. 在java中提供時區的格式日期
- 4. 轉換爲日期的最佳方式
- 5. 什麼是使用java提取zip文件的最佳方式
- 6. 在.net中處理與時區有關的日期時間的最佳方法
- 7. 如何從ISO8601標準日期格式中提取時間?
- 8. 用正則表達式在Java中提取日期的問題
- 9. 從郵件正文中檢索URL的最佳方式
- 10. 什麼是從Python中提取行的最佳方式
- 11. rails從響應哈希中提取值的最佳方式
- 12. 從PDF中只提取粗體文本的最佳方式
- 13. 從html頁面中提取元素的最佳方式?
- 14. 從git倉庫中提取樹的最佳方式是什麼?
- 15. 從電子郵件中提取相關信息的最佳方法是什麼?
- 16. C:I/O - 從文件中讀取int的最快/最佳方式
- 17. 什麼是使用java swing的日期的最佳方式
- 18. 標題中的電子郵件日期(CodeIgniter)爲7小時
- 19. 在Java中,從時間戳中獲取一天的最佳方式
- 20. 僅從數據庫中存儲的日期時間格式中提取日期
- 21. 從電子郵件的附件中提取To:標題
- 22. 獲取日期和時區從形式
- 23. 在Spring MVC Web應用程序中爲JQuery DatePicker提供基於區域的日期格式的最佳方式?
- 24. 從PostgreSQL的時間戳中提取日期的最有效方法是什麼?
- 25. 從日期和時間屬性獲取未來事件的最佳方法
- 26. 從單詞組中獲取電子郵件ID的最佳方式是什麼?
- 27. 在java中比較兩個日期的最佳方法
- 28. 從Android中的html文件獲取內容的最佳方式
- 29. 嘗試從熊貓列中提取日期時的問題?
- 30. 從Java日誌文件中提取錯誤日期和消息
謝謝jhawk28。不過,我可以使用MailDateFormat類獲取日期。該類還解析時區,但似乎沒有簡單的方法來查找TimeZone,除了從MailDateParser複製代碼。 – mmartijn 2008-09-20 14:03:22