是否有直接的方法將Java SQL的日期從格式yyyy-MM-dd轉換爲dd MMMM yyyy格式?將Java SQL的最佳轉換方式將yyyy-MM-dd的日期轉換爲dd MMMM yyyy的格式
我可以將日期轉換爲字符串,然後操作它,但我寧願將它作爲Java SQL日期。當時我需要這樣做,數據已經從MySQL數據庫中讀取,所以我不能在那裏做出改變。
是否有直接的方法將Java SQL的日期從格式yyyy-MM-dd轉換爲dd MMMM yyyy格式?將Java SQL的最佳轉換方式將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);
注意:當您打印Date
對象不使用DateFormat
對象,像這樣:
Date date = ...;
System.out.println(date);
那麼將使用一些默認的格式進行格式化。然而,該默認格式不是您可以更改的Date
對象的屬性。
您不清楚「Java SQL Date」是什麼意思。如果你的意思是在java.sql.Date
,那麼它並不是真的有一個字符串格式...它只是一個數字。要格式化它在一個特定的方式,使用類似java.text.SimpleDateFormat
。
或者,將其轉換爲Joda TimeDateTime
; Joda Time是一個比內置API好得多的日期和時間API。例如,SimpleDateFormat
不是線程安全的。
(請注意,java.sql.Date
具有比普通java.util.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));
}
}
myJavaSqlDate.toLocalDate()
.format(
DateTimeFormatter.ofLocalizedDate (FormatStyle.LONG)
.withLocale (Locale.UK)
)
5月11日
正如其他人所說,日期時間對象有否格式。只有從對象生成或由對象解析的字符串才具有格式。但是這樣的字符串總是與日期時間對象分離並且不同。
避免使用字符串日期時間值從數據庫溝通/。對於日期時間值,使用日期 - 時間類來實例化日期 - 時間對象。
JDBC的目的是調解數據庫和Java之間的差異。
因爲它們使用麻煩的舊的遺留日期時間類或古老的喬達時庫其他的答案是過時的。兩者已被java.time類取代。
如果您手頭有java.sql.Date
對象,請將舊方法toLocalDate
添加到舊類中,將其轉換爲java.time.LocalDate
。
LocalDate ld = myJavaSqlDate.toLocalDate() ;
對於JDBC drivers是符合JDBC 4.2以後,你可以用java.time類型的直接合作。
您似乎對僅限日期的值感興趣。所以使用LocalDate
。 LocalDate
類表示沒有時間和不帶時區的僅限日期的值。
PreparedStatement::setObject
ResultSet::getObject
要生成所需格式的字符串,你可以指定一個自定義格式模式。但我建議讓java.time自動本地化。
要本地化,指定:
FormatStyle
,以確定該字符串應該是多長或縮寫是。Locale
確定(a)用於翻譯日期名稱,月份名稱等的人類語言,以及(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年
的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
,YearQuarter
和more。
謝謝。我已經做了類似於這樣的日期寫入servlet中的arraylist然後重新格式化爲字符串。然後將此ArrayList設置爲會話變量並在JSP中處理。 – 2010-07-05 11:53:33