程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 詳解Java中格局化日期的DateFormat與SimpleDateFormat類

詳解Java中格局化日期的DateFormat與SimpleDateFormat類

編輯:關於JAVA

詳解Java中格局化日期的DateFormat與SimpleDateFormat類。本站提示廣大學習愛好者:(詳解Java中格局化日期的DateFormat與SimpleDateFormat類)文章只能為提供參考,不一定能成為您想要的結果。以下是詳解Java中格局化日期的DateFormat與SimpleDateFormat類正文


DateFormat
1. DateFormat 引見
DateFormat 的感化是 格局化並解析“日期/時光”。現實上,它是Date的格局化對象,它能贊助我們格局化Date,進而將Date轉換成我們想要的String字符串供我們應用
不外DateFormat的格局化Date的功效無限,沒有SimpleDateFormat壯大;但DateFormat是SimpleDateFormat的父類。所以,我們先對DateFormat有個全體懂得,然後再進修SimpleDateFormat。
DateFormat 的感化是格局化Date。它支撐格局化作風包含 FULL、LONG、MEDIUM 和 SHORT 共4種:
(01) DateFormat.SHORT
     完整為數字,如 12.13.52 或 3:30pm
(02) DateFormat.MEDIUM
     較長,如 Jan 12, 1952
(03) DateFormat.LONG
     更長,如 January 12, 1952 或 3:30:32pm
(04) DateFormat.FULL
     是完整指定,如 Tuesday、April 12、1952 AD 或 3:30:42pm PST。
DateFormat 的界說以下
public abstract class NumberFormat extends Format {}
DateFormat 的函數接口
默許結構函數:
DateFormat()

非結構函數:

Object          clone()
boolean         equals(Object object)
abstract StringBuffer  format(Date date, StringBuffer buffer, FieldPosition field)
final StringBuffer    format(Object object, StringBuffer buffer, FieldPosition field)
final String       format(Date date)
static Locale[]     getAvailableLocales()
Calendar         getCalendar()
final static DateFormat   getInstance()
final static DateFormat   getDateInstance()
final static DateFormat   getDateInstance(int style)
final static DateFormat   getDateInstance(int style, Locale locale)
final static DateFormat   getTimeInstance()
final static DateFormat   getTimeInstance(int style)
final static DateFormat   getTimeInstance(int style, Locale locale)
final static DateFormat   getDateTimeInstance()
final static DateFormat   getDateTimeInstance(int dateStyle, int timeStyle)
final static DateFormat   getDateTimeInstance(int dateStyle, int timeStyle, Locale locale)
NumberFormat   getNumberFormat()
TimeZone     getTimeZone()
int       hashCode()
boolean     isLenient()
Date       parse(String string)
abstract Date  parse(String string, ParsePosition position)
Object      parseObject(String string, ParsePosition position)
void       setCalendar(Calendar cal)
void       setLenient(boolean value)
void       setNumberFormat(NumberFormat format)
void       setTimeZone(TimeZone timezone)

留意:DateFormat是一個籠統類。
當我們經由過程DateFormat的 getInstance(), getDateInstance()和getDateTimeInstance() 獲得DateFormat實例時;現實上是前往的SimpleDateFormat對象。
上面的函數現實上都是前往的SimpleDateFormat對象。

final static DateFormat getInstance()
final static DateFormat getTimeInstance()
final static DateFormat getTimeInstance(int style)
final static DateFormat getTimeInstance(int style, Locale locale)
final static DateFormat getDateInstance()
final static DateFormat getDateInstance(int style)
final static DateFormat getDateInstance(int style, Locale locale)
final static DateFormat getDateTimeInstance()
final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle)
final static DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale)

這些函數在SimpleDateFormat.java中的界說以下:

public static final int FULL = 0;
public static final int LONG = 1;
public static final int MEDIUM = 2;
public static final int SHORT = 3;
public static final int DEFAULT = MEDIUM;

public final static DateFormat getInstance() {
  return getDateTimeInstance(SHORT, SHORT);
}

public final static DateFormat getTimeInstance()
{
  return get(DEFAULT, 0, 1, Locale.getDefault());
}

public final static DateFormat getTimeInstance(int style)
{
  return get(style, 0, 1, Locale.getDefault());
}

public final static DateFormat getTimeInstance(int style,
                       Locale aLocale)
{
  return get(style, 0, 1, aLocale);
}

public final static DateFormat getDateInstance()
{
  return get(0, DEFAULT, 2, Locale.getDefault());
}

public final static DateFormat getDateInstance(int style)
{
  return get(0, style, 2, Locale.getDefault());
}

public final static DateFormat getDateInstance(int style,
                       Locale aLocale)
{
  return get(0, style, 2, aLocale);
}

public final static DateFormat getDateTimeInstance()
{
  return get(DEFAULT, DEFAULT, 3, Locale.getDefault());
}

public final static DateFormat getDateTimeInstance(int dateStyle,
                          int timeStyle)
{
  return get(timeStyle, dateStyle, 3, Locale.getDefault());
}

public final static DateFormat
  getDateTimeInstance(int dateStyle, int timeStyle, Locale aLocale)
{
  return get(timeStyle, dateStyle, 3, aLocale);
}

/**
 * 獲得DateFormat實例,現實上是前往SimpleDateFormat對象。
 * 
 * timeStyle -- 值可認為“FULL”或“LONG”或“MEDIUM”或“SHORT”
 * dateStyle -- 值可認為“FULL”或“LONG”或“MEDIUM”或“SHORT”
 * flags   -- 值可認為“1”或“2”或“3”。
 *    1 表現獲得“時光款式”
 *    2 表現獲得“日期款式”
 *    3 表現獲得“時光和日期款式”
 * loc    -- locale對象,表現“區域”
 */
private static DateFormat get(int timeStyle, int dateStyle,
               int flags, Locale loc) {
  if ((flags & 1) != 0) {
    if (timeStyle < 0 || timeStyle > 3) {
      throw new IllegalArgumentException("Illegal time style " + timeStyle);
    }
  } else {
    timeStyle = -1;
  }
  if ((flags & 2) != 0) {
    if (dateStyle < 0 || dateStyle > 3) {
      throw new IllegalArgumentException("Illegal date style " + dateStyle);
    }
  } else {
    dateStyle = -1;
  }
  try {
    // Check whether a provider can provide an implementation that's closer 
    // to the requested locale than what the Java runtime itself can provide.
    LocaleServiceProviderPool pool =
      LocaleServiceProviderPool.getPool(DateFormatProvider.class);
    if (pool.hasProviders()) {
      DateFormat providersInstance = pool.getLocalizedObject(
                        DateFormatGetter.INSTANCE,
                        loc, 
                        timeStyle,
                        dateStyle,
                        flags);
      if (providersInstance != null) {
        return providersInstance;
      }
    }

    return new SimpleDateFormat(timeStyle, dateStyle, loc);
  } catch (MissingResourceException e) {
    return new SimpleDateFormat("M/d/yy h:mm a");
  }
}

經由過程下面的代碼,我們可以或許進一步的熟悉到:DateFormat的感化是格局化Date;贊助我們將Date轉換成我們須要的String字符串。DateFormat供給的功效異常無限,它只能支撐FULL、LONG、MEDIUM 和 SHORT 這4種格局。並且,我們獲得DateFormat實例時,現實上是前往的SimpleDateFormat對象。

2. DateFormat 實例
上面,我們經由過程實例進修應用DateFormat的經常使用API。
源碼以下(DateFormatTest.java):

import java.util.Date;
import java.util.Locale;
import java.text.DateFormat;
import java.text.FieldPosition;

/**
 * DateFormat 的API測試法式
 */
public class DateFormatTest {

  public static void main(String[] args) {

    // 只顯示“時光”:挪用getTimeInstance()函數
    testGetTimeInstance() ;

    // 只顯示“日期”:挪用getDateInstance()函數
    testGetDateInstance() ;

    // 顯示“日期”+“時光”:挪用getDateTimeInstance()函數
    testGetDateTimeInstance() ;

    // 測試format()函數
    testFormat();
  }

  /**
   * 測試DateFormat的getTimeInstance()函數
   * 它共有3種重載情勢:
   * (01) getTimeInstance()
   * (02) getTimeInstance(int style)
   * (03) getTimeInstance(int style, Locale locale)
   *
   * @author skywang
   */
  private static void testGetTimeInstance() {
    Date date = new Date(); 

    //Locale locale = new Locale("fr", "FR");
    Locale locale = new Locale("zh", "CN"); 

    // 等價於 DateFormat.getTimeInstance( DateFormat.MEDIUM); 
    DateFormat short0 = DateFormat.getTimeInstance( ); 

    // 參數是:“時光的顯示款式”
    DateFormat short1 = DateFormat.getTimeInstance( DateFormat.SHORT); 
    DateFormat medium1 = DateFormat.getTimeInstance( DateFormat.MEDIUM); 
    DateFormat long1  = DateFormat.getTimeInstance( DateFormat.LONG); 
    DateFormat full1  = DateFormat.getTimeInstance( DateFormat.FULL); 

    // 參數是:“時光的顯示款式” 和 “地域”
    DateFormat short2 = DateFormat.getTimeInstance( DateFormat.SHORT, locale); 
    DateFormat medium2 = DateFormat.getTimeInstance( DateFormat.MEDIUM, locale); 
    DateFormat long2  = DateFormat.getTimeInstance( DateFormat.LONG, locale); 
    DateFormat full2  = DateFormat.getTimeInstance( DateFormat.FULL, locale); 

    System.out.println("\n----getTimeInstance ----\n"
        + "(1.0) Empty Param  : " + short0.format(date) +"\n"
        + "(2.1) One Param(s) : " + short1.format(date) +"\n"
        + "(2.2) One Param(m) : " + medium1.format(date) +"\n"
        + "(2.3) One Param(l) : " + long1.format(date) +"\n"
        + "(2.4) One Param(f) : " + full1.format(date) +"\n"
        + "(3.1) One Param(s,l): " + short2.format(date) +"\n"
        + "(3.2) One Param(m,l): " + medium2.format(date) +"\n"
        + "(3.3) One Param(l,l): " + long2.format(date) +"\n"
        + "(3.4) One Param(f,l): " + full2.format(date) +"\n"
        ); 
  }

  /**
   * 測試DateFormat的getDateTimeInstance()函數
   * 它共有3種重載情勢:
   * (01) getDateInstance()
   * (02) getDateInstance(int style)
   * (03) getDateInstance(int style, Locale locale)
   */
  public static void testGetDateTimeInstance() {
    Date date = new Date(); 

    Locale locale = new Locale("zh", "CN"); 

    // 等價於 DateFormat.getDateTimeInstance( DateFormat.MEDIUM); 
    DateFormat short0 = DateFormat.getDateTimeInstance( ); 

    DateFormat short1 = DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.SHORT); 
    DateFormat medium1 = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM); 
    DateFormat long1  = DateFormat.getDateTimeInstance( DateFormat.LONG, DateFormat.LONG); 
    DateFormat full1  = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL); 

    DateFormat short2 = DateFormat.getDateTimeInstance( DateFormat.SHORT, DateFormat.SHORT, locale); 
    DateFormat medium2 = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM, locale); 
    DateFormat long2  = DateFormat.getDateTimeInstance( DateFormat.LONG, DateFormat.LONG, locale); 
    DateFormat full2  = DateFormat.getDateTimeInstance( DateFormat.FULL, DateFormat.FULL, locale); 

    System.out.println("\n----getDateTimeInstance ----\n"
        + "(1.0) Empty Param  : " + short0.format(date) +"\n"
        + "(2.1) One Param(s) : " + short1.format(date) +"\n"
        + "(2.2) One Param(m) : " + medium1.format(date) +"\n"
        + "(2.3) One Param(l) : " + long1.format(date) +"\n"
        + "(2.4) One Param(f) : " + full1.format(date) +"\n"
        + "(3.1) One Param(s,l): " + short2.format(date) +"\n"
        + "(3.2) One Param(m,l): " + medium2.format(date) +"\n"
        + "(3.3) One Param(l,l): " + long2.format(date) +"\n"
        + "(3.4) One Param(f,l): " + full2.format(date) +"\n"
        ); 
  }

  /**
   * 測試DateFormat的getDateInstance()函數
   * 它共有3種重載情勢:
   * (01) getDateTimeInstance()
   * (02) getDateTimeInstance(int dateStyle, int timeStyle)
   * (03) getDateTimeInstance(int dateStyle, int timeStyle, Locale locale)
   */
  public static void testGetDateInstance() {
    Date date = new Date(); 

    //Locale locale = new Locale("en", "US"); 
    Locale locale = new Locale("zh", "CN"); 

    // 等價於 DateFormat.getDateInstance( DateFormat.MEDIUM); 
    DateFormat short0 = DateFormat.getDateInstance( ); 

    DateFormat short1 = DateFormat.getDateInstance( DateFormat.SHORT); 
    DateFormat medium1 = DateFormat.getDateInstance( DateFormat.MEDIUM); 
    DateFormat long1  = DateFormat.getDateInstance( DateFormat.LONG); 
    DateFormat full1  = DateFormat.getDateInstance( DateFormat.FULL); 

    DateFormat short2 = DateFormat.getDateInstance( DateFormat.SHORT, locale); 
    DateFormat medium2 = DateFormat.getDateInstance( DateFormat.MEDIUM, locale); 
    DateFormat long2  = DateFormat.getDateInstance( DateFormat.LONG, locale); 
    DateFormat full2  = DateFormat.getDateInstance( DateFormat.FULL, locale); 

    System.out.println("\n----getDateInstance ----\n"
        + "(1.0) Empty Param  : " + short0.format(date) +"\n"
        + "(2.1) One Param(s) : " + short1.format(date) +"\n"
        + "(2.2) One Param(m) : " + medium1.format(date) +"\n"
        + "(2.3) One Param(l) : " + long1.format(date) +"\n"
        + "(2.4) One Param(f) : " + full1.format(date) +"\n"
        + "(3.1) One Param(s,l): " + short2.format(date) +"\n"
        + "(3.2) One Param(m,l): " + medium2.format(date) +"\n"
        + "(3.3) One Param(l,l): " + long2.format(date) +"\n"
        + "(3.4) One Param(f,l): " + full2.format(date) +"\n"
        ); 

  }

  /**
   * 測試DateFormat的format()函數
   */
  public static void testFormat() {
    Date date = new Date(); 
    StringBuffer sb = new StringBuffer();
    FieldPosition field = new FieldPosition(DateFormat.YEAR_FIELD);
    DateFormat format = DateFormat.getDateTimeInstance();

    sb = format.format(date, sb, field);
    System.out.println("\ntestFormat"); 
    System.out.printf("sb=%s\n", sb);
  }
}

運轉成果:

----getTimeInstance ----
(1.0) Empty Param  : 4:54:22 PM
(2.1) One Param(s) : 4:54 PM
(2.2) One Param(m) : 4:54:22 PM
(2.3) One Param(l) : 4:54:22 PM CST
(2.4) One Param(f) : 4:54:22 PM CST
(3.1) One Param(s,l): 下晝4:54
(3.2) One Param(m,l): 16:54:22
(3.3) One Param(l,l): 下晝04時54分22秒
(3.4) One Param(f,l): 下晝04時54分22秒 CST

----getDateInstance ----
(1.0) Empty Param  : Jan 23, 2014
(2.1) One Param(s) : 1/23/14
(2.2) One Param(m) : Jan 23, 2014
(2.3) One Param(l) : January 23, 2014
(2.4) One Param(f) : Thursday, January 23, 2014
(3.1) One Param(s,l): 14-1-23
(3.2) One Param(m,l): 2014-1-23
(3.3) One Param(l,l): 2014年1月23日
(3.4) One Param(f,l): 2014年1月23日 禮拜四

----getDateTimeInstance ----
(1.0) Empty Param  : Jan 23, 2014 4:54:23 PM
(2.1) One Param(s) : 1/23/14 4:54 PM
(2.2) One Param(m) : Jan 23, 2014 4:54:23 PM
(2.3) One Param(l) : January 23, 2014 4:54:23 PM CST
(2.4) One Param(f) : Thursday, January 23, 2014 4:54:23 PM CST
(3.1) One Param(s,l): 14-1-23 下晝4:54
(3.2) One Param(m,l): 2014-1-23 16:54:23
(3.3) One Param(l,l): 2014年1月23日 下晝04時54分23秒
(3.4) One Param(f,l): 2014年1月23日 禮拜四 下晝04時54分23秒 CST


testFormat
sb=Jan 23, 2014 4:54:23 PM

OK。至此,對DateFormat的進修到此為止。接上去,我們開端進修SimpleDateFormat,它才是格局化Date須要重點懂得的。

SimpleDateFormat
1. SimpleDateFormat 引見
SimpleDateFormat 是一個格局化Date 和 解析日期字符串 的對象。它的最經常使用途是,可以或許依照指定的格局來對Date停止格局化,然後我們應用可以格局化Date後獲得的字符串。
更嚴厲的說,SimpleDateFormat 是一個以與說話情況有關的方法來格局化息爭析日期的詳細類。它許可停止格局化(日期 -> 文本)、解析(文本 -> 日期)和標准化。
SimpleDateFormat的結構函數:
結構函數

SimpleDateFormat()
SimpleDateFormat(String pattern)
SimpleDateFormat(String template, DateFormatSymbols value)
SimpleDateFormat(String template, Locale locale)

非結構函數

void               applyLocalizedPattern(String template)
void               applyPattern(String template)
Object              clone()
boolean             equals(Object object)
StringBuffer           format(Date date, StringBuffer buffer, FieldPosition fieldPos)
AttributedCharacterIterator   formatToCharacterIterator(Object object)
Date               get2DigitYearStart()
DateFormatSymbols        getDateFormatSymbols()
int               hashCode()
Date               parse(String string, ParsePosition position)
void               set2DigitYearStart(Date date)
void               setDateFormatSymbols(DateFormatSymbols value)
String              toLocalizedPattern()
String              toPattern()

SimpleDateFormat 簡略示范:

// 新建date對象,時光是2013-09-19
Date date = new Date(113,8,19); 
// 新建“SimpleDateFormat對象”,並設置 sdf 的“格局化形式”
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
// 用 sdf 格局化 date,並前往字符串。
String str = sdf.format(date); 

2. SimpleDateFormat 相干格局解釋
2.1 日期和時光形式
日期和時光格局由日期和時光形式 字符串指定。在日期和時光形式字符串中,未加引號的字母 'A' 到 'Z' 和 'a' 到 'z' 被說明為形式字母,用來表現日期或時光字符串元素。文本可使用單引號 (') 惹起來,以避免停止說明。"''" 表現單引號。一切其他字符均不說明;只是在格局化時將它們簡略復制到輸入字符串,或許在解析時與輸出字符串停止婚配。
界說了以下形式字母(一切其他字符 'A' 到 'Z' 和 'a' 到 'z' 都被保存):
字母 日期或時光元素 表現 示例 G Era 標記符 Text AD y 年 Year 1996; 96 M 年中的月份 Month July; Jul; 07 w 年中的周數 Number 27 W 月份中的周數 Number 2 D 年中的天數 Number 189 d 月份中的天數 Number 10 F 月份中的禮拜 Number 2 E 禮拜中的天數 Text Tuesday; Tue a Am/pm 標志 Text PM H 一天中的小時數(0-23) Number 0 k 一天中的小時數(1-24) Number 24 K am/pm 中的小時數(0-11) Number 0 h am/pm 中的小時數(1-12) Number 12 m 小時中的分鐘數 Number 30 s 分鐘中的秒數 Number 55 S 毫秒數 Number 978 z 時區 General time zone Pacific Standard Time; PST; GMT-08:00 Z 時區 RFC 822 time zone -0800
形式字母平日是反復的,其數目肯定其准確表現:
Text: 關於格局化來講,假如形式字母的數目年夜於等於 4,則應用完整情勢;不然,在可用的情形下應用短情勢或縮寫情勢。關於解析來講,兩種情勢都是可接收的,與形式字母的數目有關。
Number: 關於格局化來講,形式字母的數目是最小的數位,假如數位不敷,則用 0 填充以到達此數目。關於解析來講,形式字母的數目被疏忽,除非必需離開兩個相鄰字段。
Year: 假如格局器的 Calendar 是格裡高利歷,則運用以下規矩。
Month: 假如形式字母的數目為 3 或年夜於 3,則將月份說明為 text;不然說明為 number。
     關於格局化來講,假如形式字母的數目為 2,則年份截取為 2 位數,不然將年份說明為 number。
     關於解析來講,假如形式字母的數目年夜於 2,則年份照字面意義停止說明,而不論數位是若干。是以應用形式 "MM/dd/yyyy",將 "01/11/12" 解析為公元 12 年 1 月 11 日。
     在解析縮寫年份形式("y" 或 "yy")時,SimpleDateFormat 必需絕對於某個世紀來說明縮寫的年份。這經由過程將日期調劑為 SimpleDateFormat 實例創立之前的 80 年和以後 20 年規模內來完成。例如,在 "MM/dd/yy" 形式下,假如 SimpleDateFormat 實例是在 1997 年 1 月 1 日創立的,則字符串 "01/11/12" 將被說明為 2012 年 1 月 11 日,而字符串 "05/04/64" 將被說明為 1964 年 5 月 4 日。在解析時,只要正好由兩位數字構成的字符串(如 Character#isDigit(char) 所界說的)被解析為默許的世紀。其他任何數字字符串將照字面意義停止說明,例如雙數字字符串,3 個或更多半字構成的字符串,或許不都是數字的兩位數字字符串(例如"-1")。是以,在雷同的形式下, "01/02/3" 或 "01/02/003" 說明為公元 3 年 1 月 2 日。異樣,"01/02/-3" 解析為公元前 4 年 1 月 2 日。
不然,則運用日歷體系特定的情勢。關於格局化息爭析,假如形式字母的數目為 4 或年夜於 4,則應用日歷特定的 long form。不然,則應用日歷特定的 short or abbreviated form。
SimpleDateFormat 還支撐當地化日期和時光形式 字符串。在這些字符串中,以上所述的形式字母可以用其他與說話情況有關的形式字母來調換。SimpleDateFormat 不處置除形式字母以外的文本當地化;而由類的客戶端來處置。
示例
以下示例顯示了若何在美國說話情況中說明日期和時光形式。給定的日期和時光為美國寧靖洋時區的當地時光 2001-07-04 12:08:56。
日期和時光形式 成果 "yyyy.MM.dd G 'at' HH:mm:ss z" 2001.07.04 AD at 12:08:56 PDT "EEE, MMM d, ''yy" Wed, Jul 4, '01 "h:mm a" 12:08 PM "hh 'o''clock' a, zzzz" 12 o'clock PM, Pacific Daylight Time "K:mm a, z" 0:08 PM, PDT "yyyyy.MMMMM.dd GGG hh:mm aaa" 02001.July.04 AD 12:08 PM "EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700 "yyMMddHHmmssZ" 010704120856-0700 "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 2001-07-04T12:08:56.235-0700
日期格局是分歧步的。建議為每一個線程創立自力的格局實例。假如多個線程同時拜訪一個格局,則它必需是內部同步的。
3. SimpleDateFormat 示例
上面,我們經由過程實例進修若何應用SimpleDateFormat。
源碼以下(SimpleDateFormatTest.java):

import java.util.Date;
import java.util.Locale;
import java.util.Calendar;
import java.text.DateFormat;
import java.text.SimpleDateFormat;

/**
 * SimpleDateFormat 的API測試法式
 *
 * @author skywang
 * @email [email protected]
 */
public class SimpleDateFormatTest {

  public static void main(String[] args) {

    // 經由過程SimpleDateFormat 獲得日期/時光:有多種格局
    testSimpleDateFormats() ;

    // 經由過程DateFormat 獲得日期/時光
    superTest() ;
  }

  /**
   * 經由過程SimpleDateFormat 獲得日期/時光。有多種格局可以選擇
   */
  private static void testSimpleDateFormats() {
    String[] formats = new String[] {
      "HH:mm",                // 14:22
      "h:mm a",                // 2:22 下晝
      "HH:mm z",               // 14:22 CST
      "HH:mm Z",               // 14:22 +0800
      "HH:mm zzzz",              // 14:22 中國尺度時光
      "HH:mm:ss",               // 14:22:30
      "yyyy-MM-dd",              // 2013-09-19
      "yyyy-MM-dd HH:mm",           // 2013-09-19 14:22
      "yyyy-MM-dd HH:mm:ss",         // 2013-09-19 14:22:30
      "yyyy-MM-dd HH:mm:ss zzzz",       // 2013-09-19 14:22:30 中國尺度時光
      "EEEE yyyy-MM-dd HH:mm:ss zzzz",    // 禮拜四 2013-09-19 14:22:30 中國尺度時光
      "yyyy-MM-dd HH:mm:ss.SSSZ",       // 2013-09-19 14:22:30.000+0800
      "yyyy-MM-dd'T'HH:mm:ss.SSSZ",      // 2013-09-19T14:22:30.000+0800
      "yyyy.MM.dd G 'at' HH:mm:ss z",     // 2013.09.19 公元 at 14:22:30 CST
      "K:mm a",                // 2:22 下晝, CST
      "EEE, MMM d, ''yy",           // 禮拜四, 九月 19, '13
      "hh 'o''clock' a, zzzz",        // 02 o'clock 下晝, 中國尺度時光
      "yyyyy.MMMMM.dd GGG hh:mm aaa",     // 02013.九月.19 公元 02:22 下晝
      "EEE, d MMM yyyy HH:mm:ss Z",      // 禮拜四, 19 九月 2013 14:22:30 +0800
      "yyMMddHHmmssZ",            // 130919142230+0800
      "yyyy-MM-dd'T'HH:mm:ss.SSSZ",      // 2013-09-19T14:22:30.000+0800
      "EEEE 'DATE('yyyy-MM-dd')' 'TIME('HH:mm:ss')' zzzz",    // 禮拜四 2013-09-19 14:22:30 中國尺度時光
    };

    //Date date = (new Date(0));          // date為1970-01-01 07:00:00
    //Date date = Calendar.getInstance().getTime(); // date為以後時光
    Date date = new Date(113, 8, 19, 14, 22, 30);  // date為2013-09-19 14:22:30
    for (String format : formats) {
      SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.SIMPLIFIED_CHINESE);
      //SimpleDateFormat sdf = new SimpleDateFormat(format);
      System.out.format("%30s  %s\n", format, sdf.format(date));
     }
  }

  /**
   * 經由過程DateFormat 獲得日期/時光
   */
  private static void superTest() {
    // 新建date對象,時光是2013-09-19 14:22:30
    // (01) 年=“‘目的年' - 1900”,
    // (02) 月。 0是一月,1是二月,順次類推。
    // (03) 日。 1-31之間的數
    Date mDate = new Date(113, 8, 19, 14, 22, 30);
    Locale locale = new Locale("zh", "CN"); 

    // 14:22:30
    String time = DateFormat.getTimeInstance( DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE).format(mDate);
    // 2013-09-19
    String date = DateFormat.getDateInstance( DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE).format(mDate);
    // 2013-09-19 14:22:30
    String datetime = DateFormat.getDateTimeInstance( DateFormat.MEDIUM, DateFormat.MEDIUM, Locale.SIMPLIFIED_CHINESE).format(mDate);

    System.out.printf("\ntime=%s\ndate=%s\ndatetime=%s\n",time,date,datetime); 
  }
}

運轉成果:

             HH:mm  14:22
            h:mm a  2:22 下晝
            HH:mm z  14:22 CST
            HH:mm Z  14:22 +0800
          HH:mm zzzz  14:22 中國尺度時光
           HH:mm:ss  14:22:30
          yyyy-MM-dd  2013-09-19
       yyyy-MM-dd HH:mm  2013-09-19 14:22
      yyyy-MM-dd HH:mm:ss  2013-09-19 14:22:30
   yyyy-MM-dd HH:mm:ss zzzz  2013-09-19 14:22:30 中國尺度時光
 EEEE yyyy-MM-dd HH:mm:ss zzzz  禮拜四 2013-09-19 14:22:30 中國尺度時光
   yyyy-MM-dd HH:mm:ss.SSSZ  2013-09-19 14:22:30.000+0800
  yyyy-MM-dd'T'HH:mm:ss.SSSZ  2013-09-19T14:22:30.000+0800
 yyyy.MM.dd G 'at' HH:mm:ss z  2013.09.19 公元 at 14:22:30 CST
            K:mm a  2:22 下晝
       EEE, MMM d, ''yy  禮拜四, 九月 19, '13
     hh 'o''clock' a, zzzz  02 o'clock 下晝, 中國尺度時光
 yyyyy.MMMMM.dd GGG hh:mm aaa  02013.九月.19 公元 02:22 下晝
  EEE, d MMM yyyy HH:mm:ss Z  禮拜四, 19 九月 2013 14:22:30 +0800
         yyMMddHHmmssZ  130919142230+0800
  yyyy-MM-dd'T'HH:mm:ss.SSSZ  2013-09-19T14:22:30.000+0800
EEEE 'DATE('yyyy-MM-dd')' 'TIME('HH:mm:ss')' zzzz  禮拜四 DATE(2013-09-19) TIME(14:22:30) 中國尺度時光

time=14:22:30
date=2013-9-19
datetime=2013-9-19 14:22:30

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved