[英]How to convert a date a user selects in MM-dd-yyyy format to the format yyyy-MM-dd in Java
[英]Best way to convert Java SQL Date from yyyy-MM-dd to dd MMMM yyyy format
有沒有一種直接的方法將Java SQL Date從格式yyyy-MM-dd轉換為dd MMMM yyyy格式?
我可以將日期轉換為字符串,然后操縱它,但我寧願將其保留為Java SQL日期。 在我需要這樣做的時候,數據已經從MySQL數據庫中讀取,所以我不能在那里進行更改。
諸如java.sql.Date
和java.util.Date
(其中java.sql.Date
是子類)之類的對象沒有自己的格式。 您使用java.text.DateFormat
對象以特定格式顯示這些對象,並且它是確定格式的DateFormat
(而不是Date
本身)。
例如:
Date date = ...; // wherever you get this
DateFormat df = new SimpleDateFormat("dd MMMM yyyy");
String text = df.format(date);
System.out.println(text);
注意:在不使用DateFormat
對象的情況下打印Date
對象時,如下所示:
Date date = ...;
System.out.println(date);
然后它將使用一些默認格式進行格式化。 但是,該默認格式不是您可以更改的Date
對象的屬性。
如果是用於演示,您可以立即使用SimpleDateFormat:
package org.experiment;
import java.sql.Date;
import java.text.SimpleDateFormat;
public class Dates {
private static SimpleDateFormat df = new SimpleDateFormat("MMMM yyyy");
public static void main(String[] args){
Date oneDate = new Date(new java.util.Date().getTime());
System.out.println(df.format(oneDate));
}
}
目前尚不清楚“Java SQL Date”的含義。 如果你的意思是作為java.sql.Date
,那么它並沒有真正有一個字符串格式...它只是一個數字。 要以特定方式格式化,使用類似java.text.SimpleDateFormat
。
或者,將其轉換為Joda Time DateTime
; Joda Time是比內置API更好的日期和時間API。 例如, SimpleDateFormat
不是線程安全的。
(請注意, java.sql.Date
比普通的java.util.Date
更精確,但看起來你不需要它。)
myJavaSqlDate.toLocalDate()
.format(
DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG )
.withLocale ( Locale.UK )
)
2017年5月11日
正如其他人所說, 日期時間對象沒有格式 。 只有從對象生成或由對象解析的字符串才具有格式。 但是這樣的字符串總是與日期時間對象分開並且不同。
避免使用字符串與數據庫之間傳遞日期時間值。 對於日期時間值,請使用日期時間類來實例化日期時間對象。
JDBC的目的是調解數據庫和Java之間的類型差異。
其他答案已經過時,因為他們使用麻煩的舊遺留日期時間類或古老的Joda-Time庫。 兩者都被java.time類所取代。
如果您手頭有java.sql.Date
對象, java.time.LocalDate
通過調用添加到舊類的新方法toLocalDate
將其轉換為java.time.LocalDate
。
LocalDate ld = myJavaSqlDate.toLocalDate() ;
對於符合JDBC 4.2及更高版本的JDBC驅動程序 ,您可以直接使用java.time類型。
您似乎對僅限日期的值感興趣。 所以使用LocalDate
。 LocalDate
類表示沒有時間且沒有時區的僅日期值。
PreparedStatement::setObject
ResultSet::getObject
要以所需格式生成字符串,您可以指定自定義格式設置模式。 但我建議讓java.time自動本地化。
要進行本地化,請指定:
FormatStyle
用於確定字符串的長度或縮寫。 Locale
,以及(b)決定縮寫,大小寫,標點符號,分隔符等問題的文化規范。 例…
LocalDate ld = LocalDate.now ( ZoneId.of ( "America/Montreal" ) ); // Today's date at this moment in that zone.
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate ( FormatStyle.LONG ).withLocale ( Locale.UK );
String output = ld.format ( f );
輸出:2017年5月11日
java.time框架內置於Java 8及更高版本中。 這些類取代了麻煩的舊遺留日期時間類,如java.util.Date
, Calendar
和SimpleDateFormat
。
現在處於維護模式的Joda-Time項目建議遷移到java.time類。
要了解更多信息,請參閱Oracle教程 。 並搜索Stack Overflow以獲取許多示例和解釋。 規范是JSR 310 。
從哪里獲取java.time類?
ThreeTen-Extra項目使用其他類擴展了java.time。 該項目是未來可能添加到java.time的試驗場。 您可以在這里找到一些有用的類,比如Interval
, YearWeek
, YearQuarter
,和更多 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.