2010-07-05 47 views

回答

8

對象如java.sql.Datejava.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對象的屬性。

+0

謝謝。我已經做了類似於這樣的日期寫入servlet中的arraylist然後重新格式化爲字符串。然後將此ArrayList設置爲會話變量並在JSP中處理。 – 2010-07-05 11:53:33

5

您不清楚「Java SQL Date」是什麼意思。如果你的意思是在java.sql.Date,那麼它並不是真的一個字符串格式...它只是一個數字。要格式化它一個特定的方式,使用類似java.text.SimpleDateFormat

或者,將其轉換爲Joda TimeDateTime; Joda Time是一個比內置API好得多的日期和時間API。例如,SimpleDateFormat不是線程安全的。

(請注意,java.sql.Date具有比普通java.util.Date更精確,但它看起來像你不需要在這裏。)

6

如果是爲了展示,你可以使用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)); 
    } 

} 
1

TL;博士2017年

myJavaSqlDate.toLocalDate() 
      .format(
       DateTimeFormatter.ofLocalizedDate (FormatStyle.LONG) 
            .withLocale (Locale.UK) 
      ) 

5月11日

不要混爲一談日期時間值與文字表示

正如其他人所說,日期時間對象有格式。只有從對象生成或由對象解析的字符串才具有格式。但是這樣的字符串總是與日期時間對象分離並且不同。

使用對象,而不是字符串

避免使用字符串日期時間值從數據庫溝通/。對於日期時間值,使用日期 - 時間類來實例化日期 - 時間對象。

JDBC的目的是調解數據庫和Java之間的差異。

使用java.time

因爲它們使用麻煩的舊的遺留日期時間類或古老的喬達時庫其他的答案是過時的。兩者已被java.time類取代。

如果您手頭有java.sql.Date對象,請將舊方法toLocalDate添加到舊類中,將其轉換爲java.time.LocalDate

LocalDate ld = myJavaSqlDate.toLocalDate() ; 

對於JDBC drivers是符合JDBC 4.2以後,你可以用java.time類型的直接合作。

您似乎對僅限日期的值感興趣。所以使用LocalDateLocalDate類表示沒有時間和不帶時區的僅限日期的值。

要生成所需格式的字符串,你可以指定一個自定義格式模式。但我建議讓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年


5月11日關於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

相關問題