1 package cn.learn;
2
3 import java.text.ParseException;
4 import java.text.SimpleDateFormat;
5 import java.util.Calendar;
6 import java.util.Date;
7 /*
8 Date:精确到毫秒,Date()获取当前的毫秒值,是于格林时间的差值
9 java.util.Date
10
11 日期转换:
12 时间原点:1970年1月1日00:00:00(英国格林威治时间)
13 中国东八区再增加八小时
14 1天等于86400s
15 */
16 public class DateApi {
17 public static void main(String[] args) throws ParseException {
18
19 //计算当前时间毫秒值,是一个与时间原点的毫秒差值,long型
20 System.out.println(System.currentTimeMillis()); //1567842049596
21 System.out.println(System.currentTimeMillis()/(86400*1000)/365); //49
22 System.out.println(new Date().getTime()); //1567842049596
23
24 //Date类的无参构造方法,获取系统当前时期时间
25 System.out.println(new Date()); //Sat Sep 07 15:35:39 CST 2019
26
27 //Date类带参数的构造方法new Date(long 毫秒值)
28 System.out.println(new Date(System.currentTimeMillis()));//Sat Sep 07 15:35:39 CST 2019
29
30 //Date类的格式化,DateFormat在java.text.DateFormat
31 //功能:1.解析 2.格式化
32 /*
33 SimpleDateFormat的两大方法
34 1.String format(Date date) -按照指定的格式,把Date日期格式化为符合模式的字符串
35 2.Date parse(String source) -把符合模式的字符串,解析为Date日期
36 注:parse声明了一个异常方法,如果不符合构造模式,就会抛出异常
37
38 DateFormat是一个抽象类,需要继承重写抽象方法
39 java已有SimpleDateFormat继承了DateFormat
40
41 */
42
43 //把日期格式化为文本
44 SimpleDateFormat std = new SimpleDateFormat();
45 Date date= new Date();
46 System.out.println(std.format(date));//默认为2019/9/7 下午4:08
47 //格式化时format(也可以是毫秒数)
48 System.out.println(new SimpleDateFormat("yyyy-MM-dd,HH:mm:ss").
49 format(new Date())); //2019-09-07,16:04:29
50
51 //解析方法parse必须和new时的pattern格式一样,返回一个Date格式,
52 //会抛出一个解析异常,"-"
53 std.parse("2018-02-03,10:00:02");
54
55 }
56
57 }
1 package cn.learn;
2 /*
3 Calendar为一个抽象类
4 里面有含有很多操作日历字段的方法,其中有一个静态方法getInstance,该方法返回了Calendar的子类对象
5 常用方法:
6 1.public int get(int field); -返回给定日历字段值
7 2.public void set(int field,int value) -把给定的字段,设置日历值
8 3.public abstract void add(int field,int amount); -根据日历的规则,为给定的日历字段添加或减去指定的时间量
9 field 代表封装在Calendar中的静态常量,例如YEAR代表年,实际上是集合元素的索引值
10
11 */
12
13 import java.util.Calendar;
14 import java.util.Date;
15
16 import static java.util.Calendar.*;
17
18 public class CalendarApi {
19 public static void main(String[] args) {
20 Calendar today = Calendar.getInstance(); //多态
21 System.out.println(today); //today的所有字段值,含日历的各种信息
22 System.out.println(today.getTime()); //等同于new Date();,返回的为Date对象,把日历对象转换了日期对象
23 System.out.println(new Date()); //实际是毫秒值
24
25 /*
26 获取年月日,没有下面好用
27 System.out.println(new SimpleDateFormat("yyyy-MM-dd,HH:mm:ss").
28 format(new Date())); //2019-09-07,16:04:29
29 */
30 //拆分出来好计算差值值,注意的有月份少1,日少一日(从0开始),时间是12进制
31 System.out.println(today.get(YEAR)+"年"+(today.get(MONTH)+1)+"月"
32 +(today.get(DAY_OF_MONTH)+1)+"日 "+(today.get(HOUR)+12)+"时"
33 +today.get(MINUTE)+"分"+today.get(SECOND)+"秒");
34
35 //设置时间,计算差值
36 Calendar oldDay = Calendar.getInstance();
37 oldDay.set(Calendar.MONTH,2);
38 System.out.println(today.get(MONTH)-oldDay.get(MONTH)+1); //8-2+1=7
39 //同时设置年月日,set方法重载
40 oldDay.set(2017,8,1);
41 System.out.println(oldDay.get(MONTH)); //8
42 System.out.println(today.get(MONTH)-oldDay.get(MONTH)); //8-8=0
43
44 /*
45 public abstract void add(int field,int amount); -根据日历的规则
46 为给定的日历字段添加或减去指定的时间量
47 */
48 today.add(YEAR,5);
49 System.out.println(today.get(YEAR)); //2024
50
51
52 }
53 }
54 //Date可用来计算天数差,Calendar可用来计算年数差,但Calendar生成的对象也有getTime(),
55 // 格式化,解释输出,Date好用