2011-05-31 76 views
138

所以我從一個輸入對象的日期屬性形式:轉換Date對象到日曆對象

Tue May 24 05:05:16 EDT 2011 

我寫一個簡單的輔助方法,將其轉換爲日曆的方法,我用下面的代碼:

public static Calendar DateToCalendar(Date date) 
{ 
Calendar cal = null; 
try { 
    DateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 
    date = (Date)formatter.parse(date.toString()); 
    cal=Calendar.getInstance(); 
    cal.setTime(date); 
    } 
    catch (ParseException e) 
    { 
     System.out.println("Exception :"+e); 
    } 
    return cal; 
} 

爲了模擬輸入對象,我只是分配的代碼中的值目前正在使用:

private Date m_lastActivityDate = new Date(); 

然而,這是得到安寧我一個空指針,一旦方法達到:

date = (Date)formatter.parse(date.toString()); 
+1

Dup的http://stackoverflow.com/questions/2727698/date-object-to-calendar-java的 – Vadzim 2015-06-08 17:24:33

回答

342

這是你的方法:

public static Calendar toCalendar(Date date){ 
    Calendar cal = Calendar.getInstance(); 
    cal.setTime(date); 
    return cal; 
} 

一切你正在做的是都錯了的和不必要的。

順便說一句,Java命名約定表明方法名稱以小寫字母開頭,所以它應該是:dateToCalendartoCalendar(如圖所示)。


好的,讓我們給你的代碼加個牛奶吧?

DateFormat formatter = new SimpleDateFormat("yyyyMMdd"); 
date = (Date)formatter.parse(date.toString()); 

DateFormat用來將字符串轉換爲日期(parse())或日期到字符串(format())。您正在使用它將日期的字符串表示形式解析回日期。這是不對的,可以嗎?

+0

許多感謝的人。我其實得到了一個網站的代碼。鑑於上述方法的乾淨,我現在開始感覺我的intToCalendar方法有點臃腫''''''''嘗試{String stringInt = String.valueOf(i); DateFormat formatter = new SimpleDateFormat(「yyyyMMdd」); Date date =(Date)formatter.parse(stringInt); CAL = Calendar.getInstance(); cal.setTime(日期); } catch(ParseException e){System.out.println(「Exception:」+ e); }返回cal; }' – Will 2011-05-31 10:26:26

+1

@會a)不要使用int,使用long。日期保存的值比int可以存儲的值大。 b)使用[新日期(長)](http://download.oracle.com/javase/6/docs/api/java/util/Date.html#Date%28long%29) – 2011-05-31 10:31:08

+1

它看起來像代碼中原來的問題不僅是爲了將日期轉換爲日曆,而且是爲了同時從日期中刪除時間。如何正確地執行後者可以在[這裏]找到(http://stackoverflow.com/questions/5050170/java-getting-date-without-time)。而不是使用'(Date)formatter.parse(date.toString());',嘗試'formatter.parse(formatter。格式(日期));' – Chris 2013-03-16 11:59:17

-5

它是那麼容易......將日期日曆這樣的:

Calendar cal=Calendar.getInstance(); 
DateFormat format=new SimpleDateFormat("yyyy/mm/dd"); 
format.format(date); 
cal=format.getCalendar(); 
+3

兩年前公認的解決方案是一種更簡潔的方法。注意到這個代碼有一個隱藏的假設,即與'format'關聯的日曆對象當前擁有我們剛剛格式化的日期,並且作爲使用不含小時/分鐘/秒的日期格式化的副作用,該內部日期也沒有小時/分鐘/秒。也許,但沒有記錄的行爲。做所接受的答案,直接表明我們正在努力做什麼。如果您希望刪除小時/分鐘/秒,請參閱有關如何執行此操作的已接受答案的評論。 – ToolmakerSteve 2015-09-06 19:41:50

-8

此功能會從Java日期對象返回SQL Date對象。

public java.sql.Date convertJavaDateToSQL(Date d) 
{ 

    java.sql.Date d1= new java.sql.Date(d.getTime()); 
    return d1; 
} 
+0

這個問題與'java.sql.Date'無關。 – 2014-02-06 09:21:57