2016-03-25 54 views
2

我試圖將字符串轉換成日期格式util.Date,我已經試過這種方法如下如何在util.date格式中轉換字符串日期?

String startingDate="25 Mar 2016"; 
SimpleDateFormat sdf=new SimpleDateFormat("dd MMM yyyy"); 
sdf.setTimeZone(TimeZone.getTimeZone("IST")); 
Date date=sdf.parse(startingDate); 

我想要的日期輸出爲「週五03月25日00:00:00北京時間2016」,但我得到「Thu Mar 24 18:30:00 UTC 2016」,這是不正確的,因爲我得到了不同的TIMEZONE,我想要「IST」時區。請幫忙 ! Thanx提前

+0

如果你將它轉換爲Date對象,那麼你也有時間。爲什麼當你首先想要字符串時,將字符串轉換爲日期? – user2004685

+0

無論我得到的時間,但我需要在IST格式輸出是UTC格式,我不需要。我想在日期,因爲我想使用日期date.getTime()方法。 –

+0

如果我正確理解您的問題,您希望控制檯以'IST'格式而不是'UTC'打印日期。在下面檢查我的答案。 – user2004685

回答

3

你已經通過設置在SimpleDateFormatTimeZone房產,然後用它來解析你的輸入字符串轉換的TimeZoneIST

如果我正確理解您的問題,您希望控制檯打印日期IST而不是UTCGMT。對於這一點,你只需要做更改默認TimeZoneIST

TimeZone.setDefault(TimeZone.getTimeZone("IST")); 

這裏是代碼片段:

public static void main (String[] args) throws Exception 
{ 
    String startingDate = "25 Mar 2016"; 
    SimpleDateFormat sdf = new SimpleDateFormat("dd MMM yyyy"); 
    sdf.setTimeZone(TimeZone.getTimeZone("IST")); 

    TimeZone.setDefault(TimeZone.getTimeZone("IST")); 
    System.out.println(sdf.parse(startingDate)); 
} 

輸出:

Fri Mar 25 00:00:00 IST 2016 
+0

Thanx我正在檢查,如果這項工作..讓你知道:) –

+0

Thanx它的工作:) –

+4

@Rahul你的歡迎!如果它幫助你,請求你接受答案。 – user2004685

3

我想要的輸出日期爲「2016年3月25日」 ..

默認情況下,當你打印Date實例方法DatetoString類將被調用,它會打印數據的日期格式爲EEE MMM dd HH:mm:ss zzz yyyy,以便您獲得Thu Mar 24 18:30:00 UTC 2016

目前,如果您已有DateString,則無需格式化日期即可簡單使用String。您也可以使用SimpleDateFormat#format(String dateString)方法根據特定模式格式化Date,這裏的dd MMM yyyy等格式方法會返回格式爲StringDate實例。

注意:解析Date不會格式化Date對象的值。 SimpleDateFormat#parse將把Stringdd MMM yyyy轉換爲Date實例,而SimpleDateFormat#format將從Date返回Stringdd MMM yyyy格式。

SimpleDateFormat#setTimeZone說,

時區通過該方法設置可能會被覆蓋作爲 調用解析方法的結果。

而且,你可以不設置TimeZoneDate對象,你打印這已經是由user2004685建議Date使用前TimeZone.setDefault(TimeZone.getTimeZone("IST"));方法。

+0

但是,如果所需的輸出是字符串本身,爲什麼要首先將字符串轉換爲日期呢? – user2004685

+0

沒問題,如果我得到時間..但我需要在IST格式和輸出是UTC格式,因爲我的日期是「3月24日」而不是「3月25日」 –

+0

@Rahul你如何獲得輸出作爲'星期四Mar 24 18:30:00 UTC 2016'?通過在控制檯上打印日期? –

0

你可以在這裏:

String startingDate="25 Mar 2016"; 
DateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy"); 
System.out.println("Date: " + dateFormat.parse(startingDate)); 
+0

Thanx回答,但我從user2004685 –

+0

得到的答案你總是歡迎。嘗試一次 –

1

問題和其他答案正在使用過時的類。

避免舊日期,時間類

老java.util.Date/.Calendar,SimpleDateFormat的,而這種與Java的早期版本中捆綁已被證明是設計不當,令人費解,麻煩。避免它們。

java.time

java.time框架內置於Java 8及更高版本。 Backports可用於Java 6和Android。

這些新課程是一個巨大的改進了舊的日期時間類。搜索堆棧溢出瞭解更多討論和示例。

對於不包含日期時間的僅限日期的值,請使用LocalDate類。

指定人類語言的Locale來解釋月份名稱。如果省略,則隱式應用JVM的當前默認值Locale。最好明確指定所需的/預期的語言環境。例如,Locale.USLocale.ENGLISHnew Locale("en" , "IN"),無論適合您的傳入數據。

String input = "25 Mar 2016"; 
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd MMM yyyy"); 
formatter = formatter.withLocale(Locale.ENGLISH); // Specify the language to interpret name-of-month. 
LocalDate localDate = LocalDate.parse(input , formatter); 

爲了得到一個日期 - 時間與一天的第一刻起,指定一個時區來創建一個ZonedDateTime

ZoneId zoneId = ZoneId.of("Asia/Kolkata"); // Or "Europe/Paris", "America/Montreal", and such. 
ZonedDateTime zdt = localDate.atStartOfDay(zoneId); 

永不假定當天開始的時間00:00:00.0。夏令時(DST)等異常意味着該日可能會在另一個時間開始。讓java.time通過調用atStartOfDay來處理這些細節。

+0

Thanx回答將嘗試和使用這一點。 –

相關問題