Java中如何使用DateFormat函数格式化日期和时间?
DateFormat是Java中用来格式化日期、时间以及日期时间的类,它是抽象类,它的实例化类是SimpleDateFormat。DateFormat可以将日期和时间转换成字符串,也可以将字符串转换成日期和时间。下面是一些关于如何使用DateFormat函数格式化日期和时间的介绍。
一、DateFormat函数的常用方法
1、format方法:将指定的日期时间转换为指定格式的字符串
语法:public final String format(Date date)
示例:
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatDemo {
public static void main(String[] args) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String currentDate = dateFormat.format(new Date());
System.out.println("当前时间:" + currentDate);
}
}
输出结果为:当前时间:2020-11-09 16:26:51
2、parse方法:将指定格式的字符串转换为日期时间
语法:public Date parse(String source) throws ParseException
示例:
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormatDemo {
public static void main(String[] args) throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2020-11-09");
System.out.println(date);
}
}
输出结果为:Mon Nov 09 00:00:00 CST 2020
3、getDateInstance方法:
语法:
public static final DateFormat getDateInstance()
public static final DateFormat getDateInstance(int style)
public static final DateFormat getDateInstance(int style, Locale locale)
示例:
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class DateFormatDemo {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.LONG, Locale.FRENCH);
String currentDate = dateFormat.format(new Date());
System.out.println(currentDate);
}
}
输出结果为:9 novembre 2020
4、getTimeInstance方法:
语法:
public static final DateFormat getTimeInstance()
public static final DateFormat getTimeInstance(int style)
public static final DateFormat getTimeInstance(int style, Locale locale)
示例:
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class DateFormatDemo {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getTimeInstance(DateFormat.LONG, Locale.GERMAN);
String currentTime = dateFormat.format(new Date());
System.out.println(currentTime);
}
}
输出结果为:16:26:51 MEZ
5、getDateTimeInstance方法:
语法:
public static final DateFormat getDateTimeInstance()
public static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle)
public static final DateFormat getDateTimeInstance(int dateStyle, int timeStyle, Locale locale)
示例:
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
public class DateFormatDemo {
public static void main(String[] args) {
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, Locale.CHINA);
String currentDateTime = dateFormat.format(new Date());
System.out.println(currentDateTime);
}
}
输出结果为:2020年11月9日 下午04时26分51秒 CST
二、DateFormat函数的格式化样式
1、日期格式化样式
yyyy:表示年份,如2020
MM:表示月份,如05
M:同上,但是没有前导零
dd:表示日期,如01
d:同上,但是没有前导零
EEE:表示星期几,如周一、周二
E:同上,但是缩写
2、时间格式化样式
HH:表示小时,24小时制,如01、23
h:表示小时,12小时制,如01、11
mm:表示分钟,如01、59
ss:表示秒钟,如01、59
a:表示AM/PM,例如上午或下午
3、常用的格式化样式
yyyy-MM-dd:表示年份-月份-日期,如2020-05-01
yyyy年MM月dd日:表示年份年-月份月-日期日,如2020年5月1日
yyyyMMddHHmmss:表示年份月份日期小时分钟秒钟,如20200501123456
三、DateFormat的线程安全问题
SimpleDateFormat是DateFormat的实例化类。但是SimpleDateFormat类没有考虑线程安全问题,因此在多线程情况下,使用SimpleDateFormat类很容易出现问题。解决方法可以是使用ThreadLocal。
private static ThreadLocal<DateFormat> threadLocal = new ThreadLocal<DateFormat>() {
protected DateFormat initialValue() {
return new SimpleDateFormat("yyyy-MM-dd");
}
};
public static Date parse(String dateStr) throws ParseException {
return threadLocal.get().parse(dateStr);
}
public static String format(Date date) {
return threadLocal.get().format(date);
}
将SimpleDateFormat放置在ThreadLocal中,就可以解决SimpleDateFormat的线程安全问题。
四、总结
DateFormat类是Java中用来格式化日期、时间以及日期时间的类,它的实例化类是SimpleDateFormat。DateFormat可以将日期和时间转换成字符串,也可以将字符串转换成日期和时间。DateFormat的方法包括format、parse、getDateInstance、getTimeInstance、getDateTimeInstance等。DateFormat的格式化样式包括日期格式化样式和时间格式化样式。由于SimpleDateFormat类没有考虑线程安全问题,在多线程情况下容易出现问题,使用ThreadLocal可以解决线程安全问题。
