Java DateFormat类

时间:2020-01-09 10:35:16  来源:igfitidea点击:

java.text.DateFormat是一个抽象类,它充当日期/时间格式子类的超类,这些子类完成以下任务:

  • 格式化日期或者时间-通常传递Date对象,并返回格式化的String。
  • 解析日期或者时间-传递字符串,并返回解析的Date对象。

获取DateFormat实例

在DateFomat类中,有一些静态工厂方法来获取日期格式器,时间格式器或者日期时间格式器。

为了获得日期格式器

  • getDateInstance()–获取具有默认FORMAT语言环境的默认格式样式的日期格式化程序。

  • getDateInstance(int style)–获取具有默认FORMAT语言环境的给定格式样式的日期格式程序。

  • getDateInstance(int style,Locale aLocale)-获取具有给定语言环境的给定格式样式的日期格式化程序。

为了获得时间格式化程序

  • getTimeInstance()–使用默认的FORMAT语言环境的默认格式化样式获取时间格式化程序。

  • getTimeInstance(int style)–获取具有默认FORMAT语言环境的给定格式样式的时间格式化程序。

  • getTimeInstance(int style,Locale aLocale)-为给定语言环境获取具有给定格式样式的时间格式化程序。

要获取日期/时间格式化程序

  • getDateTimeInstance()–使用默认的FORMAT语言环境获取具有默认格式样式的日期/时间格式化程序。

  • getDateTimeInstance(int dateStyle,int timeStyle)–获取具有默认FORMAT语言环境的给定日期和时间格式样式的日期/时间格式化程序。

  • getDateTimeInstance(int dateStyle,int timeStyle,Locale aLocale)–使用给定语言环境的给定格式样式获取日期/时间格式化程序。

对于格式样式,在DateFormat类中定义了常量字段,

DateFormat.FULL = 0
DateFormat.LONG	= 1
DateFormat.MEDIUM = 2
DateFormat.DEFAULT = 2 (Its value is MEDIUM.)
DateFormat.SHORT = 3

格式化日期示例

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

public class DFExample {

  public static void main(String[] args) {
    Date date = new Date();
    DateFormat df;
    
    // Default settings
    df = DateFormat.getDateInstance();
    System.out.println("Date with default settings- " + df.format(date));
    
    // Style FULL and Locale
    df = DateFormat.getDateInstance(DateFormat.FULL, Locale.FRANCE);
    System.out.println("Full Date (France)- " + df.format(date));
    
    // Style Long and Locale
    df = DateFormat.getDateInstance(DateFormat.LONG, Locale.US);
    System.out.println("Long Date (US)- " + df.format(date));
    
    // Style Medium, default Locale
    df = DateFormat.getDateInstance(DateFormat.MEDIUM);
    System.out.println("Medium Date- " + df.format(date));
  }
}

输出:

Date with default settings- 06-Oct-2019
Full Date (France)- dimanche 6 octobre 2019
Long Date (US)- October 6, 2019
Medium Date- 06-Oct-2019

格式化时间示例

我们只能使用getTimeInstance()方法获取时间实例并将其格式化。

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

public class DFExample {

  public static void main(String[] args) {
    Date date = new Date();
    DateFormat df;
    
    // Default settings
    df = DateFormat.getTimeInstance();
    System.out.println("Time with default settings- " + df.format(date));
    
    // Style FULL and Locale
    df = DateFormat.getTimeInstance(DateFormat.FULL, Locale.FRANCE);
    System.out.println("Full Time (France)- " + df.format(date));
    
    // Style Long and Locale
    df = DateFormat.getTimeInstance(DateFormat.LONG, Locale.US);
    System.out.println("Long time (US)- " + df.format(date));
    
    // Style Medium, default Locale
    df = DateFormat.getTimeInstance(DateFormat.MEDIUM);
    System.out.println("Medium Time- " + df.format(date));
  }
}

输出:

Time with default settings- 12:03:49 PM
Full Time (France)- 12:03:49 heure de l’Inde
Long time (US)- 12:03:49 PM IST
Medium Time- 12:03:49 PM

格式化日期和时间示例

我们可以通过获取datetime实例来格式化日期和时间。在这种情况下,要进行格式化,我们需要同时传递日期和时间样式参数。

public class DFExample {

  public static void main(String[] args) {
    Date date = new Date();
    DateFormat df;
    
    // Default settings
    df = DateFormat.getDateTimeInstance();
    System.out.println("Date time with default settings- " + df.format(date));
    
    // Style FULL and Locale
    df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.FRANCE);
    System.out.println("Full Date time (France)- " + df.format(date));
    
    // Style Long and Locale
    df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.MEDIUM, Locale.US);
    System.out.println("Long Date time (US)- " + df.format(date));
    
    // Style Medium, default Locale
    df = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM);
    System.out.println("Medium Date time- " + df.format(date));
  }
}

输出:

Date time with default settings- 06-Oct-2019, 12:08:09 PM
Full Date time (France)- dimanche 6 octobre 2019 à 12:08:09 heure de l’Inde
Long Date time (US)- October 6, 2019, 12:08:09 PM
Medium Date time- 06-Oct-2019, 12:08:09 PM

设定时区

我们还可以为DateFormat对象设置时区。

Date date = new Date();	
// Style Long and Locale
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.MEDIUM, Locale.US);
df.setTimeZone(TimeZone.getTimeZone("America/Los_Angeles"));
System.out.println("Long Date time (US)- " + df.format(date));

DateFormat同步

日期格式不同步。如果多个线程同时访问DateFormat实例,则必须在外部对其进行同步。