Java – 时间日期基础 Date For JDK7
简介
Java 提供两个关于时间运算的类,分别是 Date类和 SimpleDateFormat 类。
Date 是用于表示时钟时间的,而 SimpleDateFormat 则用于格式化日期时间的类。
Date 时间类
Date 类是一个 JDK 写好的 Javabean 类,用来描述时间,精确到毫秒。
构造方法
利用空参构造创建的对象,默认表示系统当前时间。
Date date = new Date();
System.out.println(date); // => 输出当前时间Wed Dec 07 16:36:47 CST 2022
系统在底层实现中,其实也是调用 System.currentTimeMillis();方法
利用有参构造创建的对象,表示指定的时间。
Date date = new Date(12345678999L);
System.out.println(date); // => 输出时间戳为 12345678999的时间 Sun May 24 05:21:18 CST 1970
设置时间值
date.setTime(1234567L);
设置时间值,值为毫秒级时间戳
取得时间值
date.getTime(); // =>12345678999
取得时间值,值为毫秒级时间戳
SimpleDateFormat 格式化时间
通过使用 SimpleDateFormat 类,可以让字符串格式的时间值转成真正的日期值,也可以把 Date 对象的时候转成我们想要的格式。
构造方法
构造一个 SimpleDateFormat,使用默认格式
SimpleDateFormat sdf = new SimpleDateFormat();
使用默认格式 yyyy/MM/dd HH:mm:ss
构造一个 SimpleDateFormat,使用指定格式
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
使用指定格式 yyyy-MM-dd HH:mm:ss
format() 格式化
format() 格式化方法是使日期对象转为字符串的方法
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.format(new Date());
将当时放法格式化为默认格式
parse() 解析
parse() 解析方法是使字符串转为日期对象
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.parse("2022-11-11 11:11:11");
将字符串表达的时间转为Date类对象
注意:字符串格式必须要和SimpleDateFormat 构造时的格式一致,否则会报错。
格式字母表示
字母 | 日期或时间元素 | 表示 | 示例 |
G | Era 标志符 | Text | AD |
y | 年 | Year | 1996; 96 |
M | 年中的月份 | Month | July; Jul; 07 |
w | 年中的周数 | Number | 27 |
W | 月份中的周数 | Number | 2 |
D | 年中的天数 | Number | 189 |
d | 月份中的天数 | Number | 10 |
F | 月份中的星期 | Number | 2 |
E | 星期中的天数 | Text | Tuesday; Tue |
a | Am/pm 标记 | Text | PM |
H | 一天中的小时数(0-23) | Number | 0 |
k | 一天中的小时数(1-24) | Number | 24 |
K | am/pm 中的小时数(0-11) | Number | 0 |
h | am/pm 中的小时数(1-12) | Number | 12 |
m | 小时中的分钟数 | Number | 30 |
s | 分钟中的秒数 | Number | 55 |
S | 毫秒数 | Number | 978 |
z | 时区 | General time zone | Pacific Standard Time; PST; GMT-08:00 |
Z | 时区 | RFC 822 time zone | -800 |
Calendar 日历
Calendar 代表了系统当前时间的日历对象,可以单独修改、获取时间中的年,月,日。
Calendar 是一个抽象类,不能直接创建对象。
获取Calendar对象
Calendar c = Calendar.getInstance()
基础方法
Data getTime() ==> 获取日期对象
void setTime() ==> 给日历设置日期对象
long getTimeInMillis() ==> 拿到时间毫秒值
void setTimeMillis(long millis) ==> 给日历设置时间毫秒值
int get(int field) ==> 取日历中的某个字段信息
void set(int field, int value) ==> 修改日历的某个字段信息
void add(int field, int amount) ==> 为某个字段增加、减少指定的值
字段信息
日历对象实际上是一个包含17个成员的数组,每个数组成员分别保存日历中的每一个属性字段,其中该字段如下:
字段值 | 别名 | 说明 | 备注 |
---|---|---|---|
0 | Calendar.ERA | 纪元 | |
1 | Calendar.YEAR | 年 | |
2 | Calendar.MONTH | 月 | |
3 | Calendar.WEEK_OF_YEAR | 一年中第几周 | |
4 | Calendar.WEEK_OF_MONTH | 一月中第几周 | |
5 | Calendar.DATE | 日 | |
5 | Calendar.DAY_OF_MONTH | 日 | |
6 | Calendar.DAY_OF_YEAR | 一年中第几日 | |
7 | Calendar.DAY_OF_WEEK | 一周中第几日 | |
8 | Calendar.DAY_OF_WEEK_IN_MONTH | 一月中第几周 | |
9 | Calendar.AM_PM | 上下午 | |
10 | Calendar.HOUR | 时 | |
11 | Calendar.HOUR_OF_DAY | 24小时制的时 | |
12 | Calendar.MINUTE | 分 | |
13 | Calendar.SECOND | 秒 | |
14 | Calendar.MILLISECOND | 毫秒 | |
15 | Calendar.ZONE_OFFSET | ||
16 | Calendar.DST_OFFSET | ||
17 | Calendar.FIELD_COUNT | ||
1 | Calendar.SUNDAY | 星期日 | 星期第一天为周日 |
2 | Calendar.MONDAY | 星期一 | 星期第一天为周日 |
3 | Calendar.TUESDAY | 星期二 | 星期第一天为周日 |
4 | Calendar.WEDNESDAY | 星期三 | 星期第一天为周日 |
5 | Calendar.THURSDAY | 星期四 | 星期第一天为周日 |
6 | Calendar.FRIDAY | 星期五 | 星期第一天为周日 |
7 | Calendar.SATURDAY | 星期六 | 星期第一天为周日 |
0 | Calendar.JANUARY | 一月 | 月份从0开始计,取值0~11 |
1 | Calendar.FEBRUARY | 二月 | 月份从0开始计,取值0~11 |
2 | Calendar.MARCH | 三月 | 月份从0开始计,取值0~11 |
3 | Calendar.APRIL | 四月 | 月份从0开始计,取值0~11 |
4 | Calendar.MAY | 五月 | 月份从0开始计,取值0~11 |
5 | Calendar.JUNE | 六月 | 月份从0开始计,取值0~11 |
6 | Calendar.JULY | 七月 | 月份从0开始计,取值0~11 |
7 | Calendar.AUGUST | 八月 | 月份从0开始计,取值0~11 |
8 | Calendar.SEPTEMBER | 九月 | 月份从0开始计,取值0~11 |
9 | Calendar.OCTOBER | 十月 | 月份从0开始计,取值0~11 |
10 | Calendar.NOVEMBER | 十一月 | 月份从0开始计,取值0~11 |
11 | Calendar.DECEMBER | 十二月 | 月份从0开始计,取值0~11 |
12 | Calendar.UNDECIMBER | ||
0 | Calendar.AM | 上午 | |
1 | Calendar.PM | 下午 |
get() 取字段方法
使用 get 方法可以取得指定时间的指定字段的数据,比如下面取得年字段的值
Calendar c = Calendar.getInstance();
c.get(Calendar.YEAR);
set() 设置字段方法
通过使用 set 方法,设定日期某个字段的值,如果设置的值不为常规值,则累计到其它字段值中,如下
Calendar c = Calendar.getInstance();
c.setTimeInMillis(0L);
c.set(Calendar.MONTH,13);
如上例,设置原点时间为 1970年1月1日,并设置月份为13月,但日历中并没有13月,则它会当作是一年多一月,最后得出日期将为 1971年1月1日
add() 追加时间方法
通过 add 方法可以对日历做自定义日期的计算
Calendar c = Calendar.getInstance();
c.add(Calendar.MONTH,1);
c.add(Calendar.MONTH,-1);
当追加值为正值时,会向前追加日期,当追加值为负值时,会向后退回日期。
共有 0 条评论