2013-10-21 127 views
13

嗨,我想將當前日期轉換爲這種格式YYYY-MM-DD。但是,它會將日期轉換爲String格式,但我想將其轉換回Date格式。那麼有誰能就此提出建議?如何將日期轉換爲字符串並再次日期?

這是到目前爲止我的代碼

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
Date date = new Date(); 
String datestring = dateFormat.format(date); 
+0

可能這會有所幫助[Java字符串到日期轉換] [1] [1]:http://stackoverflow.com/questions/4216745/java-string-to-date-conversion –

+1

日期對象沒有格式,只有它的字符串表示形式。 –

+2

國際海事組織,日期應始終存儲爲日期和解析自己的日期不是一個好習慣。日期格式應該用於用戶交互,而不是用於存儲數據本身。如果你想以某種方式以編程方式將日期轉換爲字符串,使用序列化要方便得多。 – Danstahr

回答

26

試試這個:

String DATE_FORMAT_NOW = "yyyy-MM-dd"; 
Date date = new Date(); 
SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT_NOW); 
String stringDate = sdf.format(date); 
    try { 
     Date date2 = sdf.parse(stringDate); 
    } catch(ParseException e){ 
    //Exception handling 
    } catch(Exception e){ 
    //handle exception 
    } 
使用此功能

public String convertDateToString(Date date, String format) { 
     String dateStr = null; 
     DateFormat df = new SimpleDateFormat(format); 
     try { 
      dateStr = df.format(date); 
     } catch (Exception ex) { 
      System.out.println(ex); 
     } 
     return dateStr; 
    } 

Convert Date to String in Java

+0

供參考,雖然正確答案現在過時了。這裏使用的類是麻煩的和有缺陷的,現在被現代java.time類取代。 –

4

使用DateFormat#parse(String)

Date date = dateFormat.parse("2013-10-22"); 
+0

thks!但我想自動生成今天的日期,而不是輸入我自己的字符串。我怎樣才能做到這一點? – ayampenyet

+0

新的Date實例具有當前日期,只需執行''new Date()''。 – qqilihq

+0

你已經在代碼中獲得了變量'datestring'。只需使用它而不是qqilihq示例中的常量。 –

0

試試這個功能

public static Date StringToDate(String strDate) throws ModuleException { 
    Date dtReturn = null; 
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-mm-dd"); 
    try { 
     dtReturn = simpleDateFormat.parse(strDate); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
    } 
    return dtReturn; 
} 
0

轉換日期爲字符串。而字符串轉換爲日期再次

public Date convertStringToDate(String dateStr, String format) { 
     Date date = null; 
     DateFormat df = new SimpleDateFormat(format); 
     try { 
      date = df.parse(dateStr); 
     } catch (Exception ex) { 
      System.out.println(ex); 
     } 
     return date; 
    } 

Convert String to date in Java

0

該線程

Convert java.util.Date to String

轉換日期字符串檢查和轉換字符串到日期試試這個,

import java.text.ParseException; 
import java.text.SimpleDateFormat; 

public class StringToDate 
{ 
    public static void main(String[] args) throws ParseException 
    { 
     SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss"); 
     String strDate = "14/03/2003 08:05:10";  
     System.out.println("Date - " + sdf.parse(strDate)); 
    } 
} 
+0

問題的代碼和本答案都過時了,使用了現在已經存在的麻煩的日期 - 時間類,取而代之的是Java 8,Java 9和更高版本中內置的現代java.time類。 –

0

tl; dr

如何將日期轉換爲字符串並再次日期?

LocalDate.now().toString() 

2017年1月23日

......還有......

LocalDate.parse("2017-01-23") 

java.time

問題採用捆綁麻煩的舊日期,時間類最早的Java版本。那些類現在是遺留的,取而代之的是內置於Java 8,Java 9和更高版本中的java.time類。

確定今天的日期需要一個時區。對於任何特定的時刻,日期在全球各地按照地區而不同。

如果不是由您提供,那麼將應用您的JVM的當前默認時區。該默認值可以在運行時隨時更改,因此不可靠。我建議你總是指定你想要的/預期的時區。

ZoneId z = ZoneId.of("America/Montreal") ; 
LocalDate ld = LocalDate.now(z) ; 

ISO 8601

你想要的YYYY-MM-DD的格式恰好符​​合ISO 8601標準。

解析/生成字符串時,該標準恰好被java.time類默認使用。因此,您只需撥打LocalDate::parseLocalDate::toString即可,而無需指定格式模式。

String s = ld.toString() ; 

爲了解析:

LocalDate ld = LocalDate.parse(s) ; 

關於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

+0

您能否指出一個備份您的「源代碼可以在運行時隨時更改,因此不可靠」的源代碼。要求?我發現這非常令人驚訝。 – omajid

+0

@omajid ['TimeZone.setDefault'](https://docs.oracle.com/javase/9​​/docs/api/java/util/TimeZone.html#setDefault-java.util.TimeZone-)可能會被調用*運行期間JVM中的任何應用程序的任何線程中的任何代碼。該更改立即影響該JVM中所有應用程序的所有線程中運行的所有其他代碼。作爲一名程序員,相當難以預測,無法控制。始終通過傳遞可選['ZoneId'](https://docs.oracle.com/javase/9​​/docs/api/java/time/ZoneId.html)參數來明確指定所需的/預期的時區。 –