2014-10-31 104 views
2

使用下面的代碼我試圖轉換時間:"2014-10-31T23:59:59"只是 "yyyy-MM-dd"格式,所以在這種情況下,"2014-10-31"轉換日期使用約達時間和忽略時間

下面是代碼:

import org.joda.time.DateTime; 
import org.joda.time.format.DateTimeFormat; 
import org.joda.time.format.DateTimeFormatter; 

public class TestConvert { 

    public static void main(String args[]){ 
     DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); 
     DateTime dt = formatter.parseDateTime("2014-10-31T23:59:59"); 
     System.out.println("formatted date is "+dt.toString()); 
    } 

} 

例外:

Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "2014-10-31T23:59:59" is malformed at "T23:59:59" 
    at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:899) 
    at (TestConvert.java:11) 

如何忽略了時間和剛剛創建的日期?

回答

4

你需要一個不同的格式來解析日期的原始格式:

public static void main(String args[]){ 
    DateTimeFormatter parser = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss"); 
    DateTime dt = parser.parseDateTime("2014-10-31T23:59:59"); 

    DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd"); 
    System.out.println("formatted date is " + formatter.print(dt)); 
} 
+0

你的代碼是不是正常?輸出爲「格式化日期爲2014-10-31T23:59:59.000Z」,當我期望它的「格式化日期爲2014-10-31」時。另外var「formatter」從來沒有使用? – 2014-10-31 13:11:38

+0

@藍天覆制粘貼錯誤 - 事實上,你是對的。你應該調用'formatter.print' - 看我編輯的答案。 – Mureinik 2014-10-31 13:20:52

3

試試這個:如預期

DateTimeFormatter formatter = DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss"); 
DateTime dt = formatter.parseDateTime("2014-10-31T23:59:59"); 
System.out.println("formatted date is "+dt.toLocalDate()); 
+1

解釋一下[[LocalDate]](http://www.joda.org/joda-time/apidocs/org/joda/time/LocalDate.html)是一個沒有時間的日期值或時區。如果您的目標是真正面向日期的,那麼請使用LocalDate類,如下所示。如果您需要時間和/或時區,但希望集中整個日子,請使用['DateTime'](http://www.joda.org/joda-time/apidocs/org/joda/time /DateTime.html)類並調用['withTimeAtStartOfDay'](http://www.joda.org/joda-time/apidocs/org/joda/time/DateTime.html#withTimeAtStartOfDay())以獲取第一時間那天。 – 2014-11-02 01:56:06