2014-08-27 34 views
0

上下文:我在數據庫中有兩個表,一個存儲日期作爲一年中的一天,並附加到年份本身,以及將日期存儲爲完整日期的日期。我需要比較這兩個,所以我只選擇表B中的行,其中全日期與表A中的日期相同。在Java中將年份和日期(例如2013216 = 2013年第216天)轉換爲完整日期

我有一個日期作爲一年和一天(如2014234這是今年的第234天),我需要將它轉換爲完整的日期格式,如:11-OCT-13 15.30.54.000000000 +02:00,所以我可以比較兩個用於從表中選擇字段的行完整日期(例如11月10日)與當日日期相同(例如2014235)。

任何人都知道如何做到這一點?

謝謝。

編輯:感謝您的幫助每個人!我已經設法得到日期轉換,現在我有兩個日期格式相同,我只需要選擇列的日期與其他表中的日期相同的行,我該如何做到這一點?使用=檢查兩個日期是否等於毫秒,我只想檢查它們是否與當天相同。你知道我怎麼會在SQL查詢中解決這個問題嗎?或者將'11 -OCT-13 = 11-OCT-13 15.30.54.000000000 +02:00'返回true,例如?

+0

當您有其他問題時,請先搜索Stackoverflow.com。如果找不到,請發佈另一個問題,而不是追加到此問題。但是你會*發現數百個關於SQL和Java日期時間的問題。 – 2014-08-27 15:30:52

回答

3

您可以使用SimpleDateFormatparse說:

DateFormat dt = new SimpleDateFormat("yyyyDDD"); 
Date dt = dt.parse(theString, 0); 

y是 「年」 字段,D是 「天一年」 字段。

如果您需要將其轉換回另一種格式的字符串,則可以使用另一個具有相關格式和其format方法的實例。

+2

@ R.T。如果實際的天數是3位數,'yyyyDD'也可以工作。 – Jesper 2014-08-27 14:11:18

+0

@Jesper: - 明白了。謝謝! +1 :) – 2014-08-27 14:11:40

+0

此舉是否將2014001(1月1日)轉換爲日期格式,如11-OCT-13 15.30.54.000000000 +02:00? – James 2014-08-27 14:16:47

0

使用以下命令:

Date date = new SimpleDateFormat("yyyyDD").parse(String.valueOf(234)); 
+0

嗨,謝謝,這會將一個變量的值爲2014001,例如,轉換爲格式爲11-OCT-13的日期15.30.54.000000000 +02:00? – James 2014-08-27 14:17:48

0

ISO 8601 - 序號日期

你的字符串格式是所謂的ISO 8601格式的ordinal date。該標準定義了年份與年份之間帶有連字符的擴展版本以及您在忽略連字符時掌握的基本格式。

我建議使用連字符,因爲它對人類來說更易識別和易讀。

避免j.u.Date和.Calendar

與Java捆綁在一起的java.util.Date和.Calendar類是出了名的麻煩。避免它們。相反,請使用Joda-Time或新java.time包與Java 8

捆綁兩個喬達時間和java.time提供LOCALDATE的類來表示一個日期,只是沒時間的一天任何或時區。

Joda-Time

Joda-Time對ISO 8601格式有很好的支持。

以下是使用Joda-Time的一些示例代碼2.4。

String input = "2013216"; 
DateTimeFormatter formatter = ISODateTimeFormatter.basicOrdinalDate(); 
LocalDate localDate = formatter.parseLocalDate(input"); 
相關問題