java学习笔记41:Date时间类及jdk源码分析、DateFormat类和SimpleDateFormat类

一、Date时间类

注:把1970 年 1 月 1 日 00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一)
  用long类型的变量来表示时间,从基准时间往前几亿年,往后几亿年都能表示。

如果想获得现在时刻的“时刻数值”,可以使用:

  long now = System.currentTimeMillis();

这个“时刻数值”是所有时间类的核心值,年月日都是根据这个“数值”计算出来的。我们工作学习涉及的时间相关类有如下这些:
在这里插入图片描述
代码示例:测试Date类的常见用法


import java.util.Date;

/*测试Date类的常见用法*/
public class Test {

	public static void main(String[] args) {
		
		//没有传值意味着当前电脑的时刻
		Date d = new Date();
		System.out.println(d);
		
		//两秒的毫秒数
		Date d2 = new Date(2000);
		System.out.println(d2);
		
		//获取毫秒数
		System.out.println(d2.getTime());
		
		//比较毫秒数
		System.out.println(d2.after(d));
		
		//以后遇到日期处理,使用Canlendar日期类
		Date d3 = new Date(2020-1900,3,10);    //被去掉了
		System.out.println(d3);
	}
}

运行结果:
在这里插入图片描述

示例:Date类的使用

public class Test {
	public static void main(String[] args) {
		Date date1 = new Date();
		System.out.println(date1.toString());
		long i = date1.getTime();
		Date date2 = new Date(i - 1000);
        Date date3 = new Date(i + 1000);
        System.out.println(date1.after(date2));    //大于
        System.out.println(date1.before(date2));    //小于
        System.out.println(date1.equals(date2));
        System.out.println(date1.after(date3));
        System.out.println(date1.before(date3));
        System.out.println(date1.equals(date3));
        System.out.println(new Date(1000L * 60 * 60 * 24 * 365 * 39L).toString());
	}
}

运行结果:
在这里插入图片描述
查看API文档大家可以看到其实Date类中的很多方法都已经过时了。JDK1.1之前的Date包含了:日期操作、字符串转化成时间对象等操作。JDK1.1之后,日期操作一般使用Calendar类,而字符串的转化使用DateFormat类。

二、DateFormat类和SimpleDateFormat类

DateFormat类的作用
   把时间对象转化成指定格式的字符串。反之,把指定格式的字符串转化成时间对象。
  DateFormat是一个抽象类,一般使用它的的子类SimpleDateFormat类来实现。

代码示例:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * 
 * 测试时间对象和字符串之间的相互转换
 * DateFomat抽象类和SimpleDateFormat实现类的使用
 */
public class Test {
	public static void main(String[] args) throws ParseException {
		
		//把时间对象按照“格式字符串指定的格式”转换成相应的字符串
		DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");    //或yyyy年MM月dd日 hh时mm分ss秒
		String str = df.format(new Date(40000000));
		System.out.println(str);
		
		//把字符串按照“格式字符串指定的格式”转换成时间对象
		DateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒");  
		
		//会报错,要求加try块或抛出,先写个简单的抛出  throws ParseException
		Date date = df2.parse("1983年5月10日 10时45分59秒");    //格式必须匹配
		System.out.println(date);
		
		//测试其他的格式字符
		DateFormat df3 = new SimpleDateFormat("D");    //查下表:D--今年的多少天
		String str3 = df3.format(new Date());
		System.out.println(str3);
	}
}

运行结果:
在这里插入图片描述

示例:DateFormat类和SimpleDateFormat类的使用

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateFormat {
    public static void main(String[] args) throws ParseException {
        // new出SimpleDateFormat对象
        SimpleDateFormat s1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        SimpleDateFormat s2 = new SimpleDateFormat("yyyy-MM-dd");
        // 将时间对象转换成字符串
        String daytime = s1.format(new Date());
        System.out.println(daytime);
        System.out.println(s2.format(new Date()));
        System.out.println(new SimpleDateFormat("hh:mm:ss").format(new Date()));
        // 将符合指定格式的字符串转成成时间对象.字符串格式需要和指定格式一致。
        String time = "2007-10-7";
        Date date = s2.parse(time);
        System.out.println("date1: " + date);
        time = "2007-10-7 20:15:30";
        date = s1.parse(time);
        System.out.println("date2: " + date);
    }
}

运行结果:
在这里插入图片描述

代码中的格式化字符的具体含义见下表
在这里插入图片描述
时间格式字符也可以为我们提供其他的便利。比如:获得当前时间是今年的第几天。代码如下:
示例:时间格式字符的使用

import java.text.SimpleDateFormat;
import java.util.Date;
public class TestDateFormat2 {
    public static void main(String[] args) {
        SimpleDateFormat s1 = new SimpleDateFormat("D");
        String daytime = s1.format(new Date());
        System.out.println(daytime);
    }
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值