2010-02-02 78 views
2

當我在1949年之前將一個日期傳入波節點方法時,我遇到了java日期問題。 我已經返回的日期是例如2049年,我知道它與日期格式有關,並認爲使用yyyy而不是RRRR會修復它。但我只是不明白爲什麼或如何改變它。任何幫助將非常apreciatedJava日期問題

public static java.sql.Date parseDate(String date) throws ParseException { 
    if (date != null) { 
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy"); 
    return new java.sql.Date(dateFormat.parse(date).getTime()); 
    } 
    return null; 
} 

感謝喬恩

+3

'String date'是怎麼樣的?註釋:1)您應該使用'java.util.Date'而不是'java.sql.Date'。 2)你應該使用Joda時間而不是'java.util.Date'。 – BalusC 2010-02-02 12:46:19

+4

「我的java日期有問題」 - 沒關係,每個人都有 – 2010-02-02 13:06:23

回答

2

讓我格式化爲你..

public static java.sql.Date parseDate(String date) throws ParseException { 
    if (date != null) { 
     SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MMM-yyyy"); 
     return new java.sql.Date(dateFormat.parse(date).getTime()); 
    } 
    return null; 
} 

這我懷疑是你想要的...

private Date convertDate() throws ParseException 
{ 
    String dateStr = "21-02-2010"; 
    SimpleDateFormat dateFormat = new SimpleDateFormat("dd-MM-yyyy"); 
    Date date = null; 
    if (dateStr != null) 
    { 
     date = new Date(dateFormat.parse(dateStr).getTime()); 
    } 

    System.out.println(date); 
    return date; 
} 

對於21-02-2010你會得到... 星期日2月21日00:00:00 GMT 2010

爲21-02-1938,你會得到... 週一2月21日00:00:00 GMT 1938年

這是否幫助?我可能是因爲你在你的代碼中有MMM。

0

TL;博士

java.sql.Date.valueOf( 
    LocalDate.parse("12-Jan-23" , DateTimeFormatter.ofPattern("dd-MMM-uuuu" , Locale.US)) 
) 

時區

你的代碼忽略時區的關鍵問題。確定一個日期需要一個時區。對於任何特定的時刻,日期因地區而異。

您的代碼使用始終使用UTC的Date。因此,從錯誤名稱Date級別生成的日期值對於UTC準確,但對於其他時區(例如America/MontrealAsia/Kolkata)無效。

使用java.time

現代的方式做到這一點的工作是與取代的麻煩舊的遺留日期時間類java.time類。

LocalDate類代表沒有時間和沒有時區的僅有日期的值。

要解析傳入的字符串,請使用DateTimeFormatter定義格式模式。指定Locale作爲翻譯月份名稱時使用的人類語言。

DateTimeFormatter f = DateTimeFormatter.ofPattern("dd-MMM-uuuu" , Locale.US); 
LocalDate localDate = LocalDate.parse("12-Jan-2017" , f); 

使用JDBC 4.2及更高版本,可以用setObjectgetObject方法直接通過LocalDate到數據庫。

對於尚未更新的JDBC驅動程序,請回退到java.sql類型。

java.sql.Date sqlDate = java.sql.Date.valueOf(localDate); 
LocalDate localDate = sqlDate.toLocalDate(); 

關於java.time

java.time框架是建立在Java 8和更高版本。這些類取代了日期時間類legacy,如java.util.Date,Calendar,& SimpleDateFormat

Joda-Time項目現在位於maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310

從何處獲取java.time類?

ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval,YearWeek,YearQuartermore