java日期操作

java日期操作


2017年6月23日学习总结


Date类在java.util包下。

Date的每一个实例用于表示一个具体的时间
内部维护一个long值,该值为UTC(世界调整时间Universal Time Coordinated),
即:1970年1月1号00:00:00 到当前Date所表示的时间
之间所经过的毫秒。
由于Date存在设计缺陷(时区,千年虫问题),所有Date的
大部分操作时间的方法全部被标注为过时方法。

因此使用Date仅用作表示一个时间。

Date()构造方法:
获取当天此时此刻的日期和时间。
Date date = new Date();
System.out.println(date);
控制台输出结果为 Fri Jun 23 09:52:27 CST 2017
Fri表示星期五,Jun表示六月,CST*标准时间,我们国家为北京时间。

long getTime()方法:
获取Date内部维护的long值,1970年1月1日00:00:00 GMT 至今的毫秒数
GMT:格林威治标准时间(Greenwich Mean Time)
long time = date.getTime();

void setTime(long time)方法:
设置此Date对象,以表示1970年1月1日00:00:00GMT以后time毫秒的时间点。

SimpleDateFormat类在java.text包下。

SimpleDateFormat可以按照指定的日期格式在Date与String之间相互转换。


日期模式匹配字符

java日期操作


SimpleDateFormat(String pattern)构造方法:
用给定的模式的日期格式符号构造 SimpleDateFormat。

String format(Date date)方法:
将给定的Date表示的日期按照当前SimpleDateFormat
指定的格式转换为字符串。 Date-->String

Date now =new Date();
System.out.println(now);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a E");
String str =sdf.format(now);
System.out.println(str);
控制台输出结果为:
Fri Jun 23 10:54:59 CST 2017
2017-06-23 10:54:59 上午 星期五

Date parse(String str)方法:
将给定的字符串按照当前SimpleDateFormat指定的
日期格式解析为Date。  String-->Date

String str = "2020-6-6 8:8:8";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = sdf.parse(str);
System.out.println(date);
控制台输出结果为:
Sat Jun 06 08:08:08 CST 2020

Calendar类在java.util包下
Calendar用于封装日历信息,其主要作用在于其方法
可以对时间分量进行运算;
Calendar是抽象类,其具体子类针对不同国家的日历系统,
其中应用最广泛的是GregorianCalendar(格里高里历,即通用的阳历 ),
对应世界上绝大多数国家/地区使用的标准日历系统。

protected Calendar()构造方法:
构造一个带有默认时区和语言环境的Calendar

Calendar getInstance()方法:
返回当前系统所在地区适用的历法
实现类,大部分地区返回的都是GregorianCalendar,
其日历字段已由当前日期和时间初始化

Date getTime()方法:
可以将当前Calendar所表示的
时间以一个Date实例形式返回
Calendar-->Date。

void setTime(Date date)方法:
使当前Calendar表示给定的Date所表示的日期
Date-->Calendar

int get(int field)方法:
获取指定时间分量所对应的值。
时间分量是一个整数,无需记住每个具体的值
因为时间分量Calendar已经提供了相应的常量
获取年
int year = calendar.get(Calendar.YEAR);
获取月(月从0开始的所以要加1修正)
int month = calendar.get(Calendar.MONTH)+1;
获取日
int day = calendar.get(Calendar.DAY_OF_MONTH);
获取周几(周日为每周的第1天所以要减1修正)
int week = calendar.get(Calendar.DAY_OF_WEEK)-1;

int getActualMaximum(int field)
获取指定时间分量所允许的最大值,
参考日期为当前Calendar表示的日期
int max = calendar.getActualMaximum(Calendar.DAY_OF_YEAR);
System.out.println("今年有"+max+"天");
max = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
System.out.println("这个月有"+max+"天");

void set(int field,int value)
为指定的时间分量设置指定的值

void add(int field,int value)
对指定时间分量累加指定的值,若给定的值为负数,则是减去。