Java DateFormat类
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实例,则必须在外部对其进行同步。