TL;博士
LocalDate.now()
.toString()
2016年1月7日
不如總是明確指定所需/預期的時區。
LocalDate.now(ZoneId.of("America/Montreal"))
.toString()
避免舊日期,時間類
您使用java.util.Calendar類是現在的遺產。避免這個類,以及java.util.Date等。這些已被證明設計不佳,令人困惑和麻煩。
java.time
舊日期,時間類已經被內置到Java 8和後來的java.time框架所取代。許多功能已被移植到ThreeTen-Backport項目中的Java中,並進一步適用於Android的ThreeTenABP。
這些現代類可以在一行代碼中完成您的目標,如下所示。
日期 - 時間格式化功能
兩個老過時的日期時間類,以及java.time類提供的格式化功能。您無需編寫自己的格式代碼。
時區
時區對確定日期至關重要。日期隨着時區的變化而變化,這是東部地區早些時候出現的新的一天。這個問題在問題和其他答案中被忽略。如果省略,則隱式應用JVM的當前默認時區。最好明確指定你想要的/預期的時區。
LocalDate
對於日期只值無無時區時間的天,並使用LocalDate
。儘管LocalDate
內沒有存儲時區,但時區確定爲「今日」。
ZoneId zoneId = ZoneId.of("America/Montreal");
LocalDate today = LocalDate.now(zoneId);
ISO 8601
你想要的YYYY-MM-DD與兩位數格式恰好符合ISO 8601標準確定合理的格式日期時間值的文本表示。該標準在java.time類中用於解析/生成字符串。
String output = today.toString();
就是這樣,3行代碼。你甚至可以合併它們。
String output = LocalDate.now(ZoneId.of("America/Montreal")).toString();
關於java.time
的java.time框架是建立在Java 8和更高版本。這些類代替了日期時間類legacy,如java.util.Date
,Calendar
,& SimpleDateFormat
。
Joda-Time項目,現在在maintenance mode,建議遷移到java.time類。請參閱Oracle Tutorial。並搜索堆棧溢出了很多例子和解釋。規格是JSR 310。
您可以直接使用數據庫交換java.time對象。使用符合JDBC 4.2或更高版本的JDBC driver。無需字符串,不需要java.sql.*
類。
從何處獲取java.time類?
的ThreeTen-Extra項目與其他類擴展java.time。這個項目是未來可能增加java.time的一個試驗場。您可以在這裏找到一些有用的類,如Interval
,YearWeek
,YearQuarter
和more。
也許地方=「0」 +月會因爲它是存儲工作,然後作爲一個字符串? – drodil 2012-04-18 06:26:30