日期与时间基本使用

概述

日期时间在计算机里用一个长整型数字表示,为时间戳,单位为毫秒,时间每过一毫秒,数字加一 时间原点为0,对应日期为1970-01-01 08:00:00 (8点是因为中国的太平洋时区是UTC-8,刚好和格林威治时间差8个小时) 1969年发布了第一个 UNIX版本:AT&T,综合考虑,当时就把1970年当做了时间原点。

常用日期类

表示日期时间的常用类有:Date、Calendar、LocalDateTime(等)
Date是最早的日期时间类,大部分方法已过时。
Calendar是日历类,除可以获取设置时间日期外,还支持做简单的日期和时间运算的功能。
LocalDateTime等是jdk1.8添加的一系列用于处理日期时间的类型
注:是java.util.Date 类,java.sql.Date类是用于数据库的 日期类

Date

Date类中的大多数方法都标注了@Deprecated 表示其已过时,在未来的某个版本中可能会被删除。
为数不多的未被标记弃用的方法有:

boolean after = date1.after(new Date()); //date1是否在某时间之后
boolean before =date1.before(new Date()); //date1是否在某时间之前
long time = date1.getTime(); //获取时间毫秒数与 System.currentTimeMillis()相同
date1.setTime(1000); //设置时间
Instant instant = date1.toInstant(); //获取java8的时间日期api中的时间戳对象

Date类的常用方法如下:

	public static void main(String[] args) {
		Date date1 = new Date(); // 无参构造创建的为当前时间的日期对象
		System.out.println("当前时间:" + date1); // 输出为:当前时间:Sun Mar 01 21:55:31 CST 2020
		System.out.println("=====================================================");
		Date date2 = new Date(60 * 60 * 1000L); // 可以使用含long类型参数的构造器创建日期对象,此时的时间为从1970-01-01 08:00:00起经过了1小时
		System.out.println("时间原点经过一小时:" + date2); // 时间原点经过一小时:Thu Jan 01 09:00:00 CST 1970

		System.out.println("----------------------------------------------------");
		//常用
		System.out.println(date1.after(new Date())); // false
		System.out.println(date1.before(new Date())); // true
		System.out.println(date1.getTime()); //获取时间毫秒
		Instant instant = date1.toInstant();// 获取java8的时间日期api的时间戳对象 可用于与calendar和localdatetime转换
		System.out.println(instant.toEpochMilli() + "毫秒");
		System.out.println(instant.getEpochSecond() + "秒");
		
		//其他方法
		System.out.println("年:"+(date1.getYear()+1900));//获得年份要加1900 
		System.out.println("月:"+(date1.getMonth()+1)); //获得值为0~11,代表1~12月
		System.out.println("日:"+date1.getDate()); //1~31
		System.out.println(date1.toGMTString());
		System.out.println(date1.toLocaleString());
		
		//设置时间为
		date1.setTime(1000);
		System.out.println(date1); // Thu Jan 01 08:00:01 CST 1970

		long currentTimeMillis = System.currentTimeMillis();// 获取当前日期的毫秒数,与new Date().getTime()一样
		System.out.println(currentTimeMillis);//
		System.out.println("==========================================================");

注:getYear()的值要+1900才正确;getMonth()值为0-11表示1-12月

日期格式化

当直接使用toString方法输出Date字符串时,格式为Thu Jan 01 08:00:01 CST 1970,并不是我们常用的表示方法,难以辨别,这时可以用SimpleDateFormat.format方法格式化日期对象为我们想要的形式。在创建SimpleDateFormat对象时传入模式串。

yyyy 代表年
MM 代表月
dd 代表日
HH 代表24进制的小时
hh 代表12进制的小时
mm 代表分钟
ss 代表秒
SS 代表毫秒

格式通常为:yyyy-MM-dd HH:mm:ss 分隔符( - :)可以改变

  SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  String format = simpleDateFormat.format(new Date());
  System.out.println("格式化后的时间为:"+format);//格式化后的时间为:2020-03-03 14:25:51
		

解析表示日期时间的字符串:
当需要将一个时间字符串转换成日期对象时,可以使用SimpleDateFormat.parse(String)方法,但要注意时间字符串的格式要与模式串的格式相同,否则会抛出异常ParseException,如果为2020/03/03 14:25:51就会抛异常

  try {
    Date parse = simpleDateFormat.parse("2020-03-03 14:25:51"); 
    System.out.println(parse);			
  } catch (ParseException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }

Calendar

Calendar是单例的,采用单例模式获取日历对象Calendar.getInstance();
获取的Calendar对象默认表示的是当前时间。
在Calendar类中定义了一些字段,可用于获取、设置年/月/日/时/分/秒/毫秒

Calendar.YEAR 年
Calendar.MONTH 月
Calendar.DATE 日
Calendar.DAY_OF_MONTH
Calendar.DAY_OF_WEEK 星期
Calendar.HOUR 时
Calendar.MINUTE 分
Calendar.SECOND 秒
Calendar.MILLISECOND 毫秒

注:MONTH的范围为0-11表示1-12月;DAY_OF_WEEK的范围为1-7表示周日-周六;所以它俩在使用时可以一个加一,一个减一。

基本使用方法:

  • 获取时间
    get方法:获取年、月、日等值
	Calendar c = Calendar.getInstance();
	System.out.println("year:"+c.get(Calendar.YEAR));
	System.out.println(c.get(Calendar.MONTH)); //和Date一样,获取的月值为0~11
	System.out.println(c.get(Calendar.DATE));
	System.out.println(c.get(Calendar.DAY_OF_MONTH)); //
	System.out.println("星期"+c.get(Calendar.DAY_OF_WEEK));  //1~7对应周日~周六
	System.out.println(c.get(Calendar.HOUR));
	System.out.println(c.get(Calendar.MINUTE));
	System.out.println(c.get(Calendar.SECOND));
	System.out.println(c.get(Calendar.MILLISECOND));
  • 设置时间
    add方法:以当前Calendar对象表示的时间为基准修改日期时间,方法第一个参数为要操作的值(年、月、日、时、分、秒、毫秒),第二个参数为增加(正值)或减少(负值)的大小
    set方法:直接设置年/月/日等,第一个参数同上,第二个参数为直接设置的值,如果超出范围则对高位进位或借位,如2020-12 设置(MONTH,12)/(MONTH,-1) 超出范围,结果为2021-01/2019-12
	c.add(Calendar.MONTH, -1); 
	c.add(Calendar.YEAR, 2);
	System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
	c.set(Calendar.DATE, 3); //直接设置年/月/日等
	c.set(Calendar.MONTH, 1); //因为月为0~11,所以这里实际设置的为2月
	System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
	c.set(Calendar.MONTH, 0);
	System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));
  • 格式化
    Calendar没有自己的格式化方法,需使用getTime()方法获取Date对象,再通过SimpleDateFormat去进行格式化。
	System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(c.getTime()));

jdk1.8日期时间API

待完善。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值