对于Java处理日期时间有两个类,Date和Calendar,在java8 API文档中,Date大部分方法已被弃用,改为用Calendar类实现。
一、DateFormat类
先写一下DateFormat类,直接上代码直观(忽略不规范命名,给你一个眼神自己体会)。
public class TestDate {
public static void main(String[] args) {
Date date = new Date();
String dateString;
DateFormat dateFormat1 = DateFormat.getInstance();//默认SHORT风格
dateString = dateFormat1.format(date);
System.out.println("1: " + dateString);
DateFormat dateFormat2 = DateFormat.getDateInstance();//默认应该是MEDIUM
dateString = dateFormat2.format(date);
System.out.println("2: " + dateString);
DateFormat dateFormat21 = DateFormat.getDateInstance(DateFormat.SHORT);
dateString = dateFormat21.format(date);
System.out.println("21: " + dateString);
DateFormat dateFormat22 = DateFormat.getDateInstance(DateFormat.MEDIUM);
dateString = dateFormat22.format(date);
System.out.println("22: " + dateString);
DateFormat dateFormat23 = DateFormat.getDateInstance(DateFormat.FULL);
dateString = dateFormat23.format(date);
System.out.println("23: " + dateString);
DateFormat dateFormat3 = DateFormat.getTimeInstance();
dateString = dateFormat3.format(date);
System.out.println("3: " + dateString);
DateFormat dateFormat4 = DateFormat.getDateTimeInstance();
dateString = dateFormat4.format(date);
System.out.println("4: " + dateString);
DateFormat dateFormat41 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.SHORT);
dateString = dateFormat41.format(date);
System.out.println("41: " + dateString);
DateFormat dateFormat42 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.MEDIUM);
dateString = dateFormat42.format(date);
System.out.println("42: " + dateString);
DateFormat dateFormat43 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
dateString = dateFormat43.format(date);
System.out.println("43: " + dateString);
DateFormat dateFormat5 = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL, Locale.UK);
dateString = dateFormat5.format(date);
System.out.println("5: " + dateString);
}
}
输出:
1: 19-8-18 下午4:37
2: 2019-8-18
21: 19-8-18
22: 2019-8-18
23: 2019年8月18日 星期日
3: 16:37:34
4: 2019-8-18 16:37:34
41: 2019年8月18日 星期日 下午4:37
42: 2019年8月18日 星期日 16:37:34
43: 2019年8月18日 星期日 下午04时37分34秒 CST
5: Sunday, 18 August 2019 16:37:34 o'clock CST
二、SimpleDateFormat类
该类允许用户自定义的日期和时间格式。
Date date = new Date();
String dateString;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd G hh:mm:ss z");
dateString = format.format(date);
System.out.println(dateString);
输出:
2019-08-18 公元 04:49:12 CST
三、获取当前日期
如果只是简单的获取当前时间,Date类完全可以处理。如上栗子。
但是如果想获取当前时间的前一天等,需要用到Calendar类。
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
calendar.add(Calendar.DATE, -1);
Date date = calendar.getTime();
String today = simpleDateFormat.format(date);
System.out.println(today);
输出:
2019-08-17 17:44:03
Calendar类其他示例:
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;//注意月份从0开始
int day = calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
System.out.println(year + "-" + month + "-" + day + " " + hour + ":" + minute + ":" + second);
输出:
2019-8-18 17:46:59
四、获取指定日期为星期几
代码如下:
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
Date date = format.parse("2022-01-01");
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
System.out.println(calendar.get(Calendar.DAY_OF_WEEK));
注意一点,在Java中周日到周一对应的值依次为1,2,3,4,5,6,7;而JavaScript对应的值依次为0,1,2,3,4,5,6.