Java时间

2018/08/13 Java

基础概念

标准时间

GMT 即「格林威治标准时间」( Greenwich Mean Time,简称 G.M.T. ),指位于英国伦敦郊区的皇家格林威治天文台的标准时间,因为本初子午线被定义为通过那里的经线。

时间戳

Unix 时间戳表示当前时间到 1970 年 1 月 1 日 00:00:00 UTC 对应的秒数。注意,JavaScript 内的时间戳指的是当前时间到 1970 年 1 月 1 日 00:00:00 UTC 对应的毫秒数,和 Unix 时间戳不是一个概念,后者表示秒数,差了 1000 倍。

常用时间类

Instant

Instant 和 Date 一样,表示一个时间戳,用于描述一个时刻,只不过它较 Date 而言,可以描述更加精确的时刻。并且 Instant 是时区无关的。

Date 最多可以表示毫秒级别的时刻,而 Instant 可以表示纳秒级别的时刻。例如:

	public static Instant now():根据系统当前时间创建一个 Instant 实例,表示当前时刻
	public static Instant ofEpochSecond(long epochSecond):通过传入一个标准时间的偏移值来构建一个 Instant 实例
	public static Instant ofEpochMilli(long epochMilli):通过毫秒数值直接构建一个 Instant 实例
	public static void main(String[] args){
	    //创建 Instant 实例
	    Instant instant = Instant.now();
	    System.out.println(instant);
	
	    Instant instant1 = Instant.ofEpochSecond(20);
	    System.out.println(instant1);
	
	    Instant instant2 = Instant.ofEpochSecond(30,100);
	    System.out.println(instant2);
	
	    Instant instant3 = Instant.ofEpochMilli(1000);
	    System.out.println(instant3);
	}

复制代码输出结果:

格式化日期时间

Java 8 的新式日期时间 API 中,DateTimeFormatter 作为格式化日期时间的主要类,它与之前的 DateFormat 类最大的不同就在于它是线程安全的,其他的使用上的操作基本类似。我们看看:

	public static void main(String[] a){
	    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
	    LocalDateTime localDateTime = LocalDateTime.now();
	    System.out.println(formatter.format(localDateTime));
	
	    String str = "2008年08月23日 23:59:59";
	    DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy年MM月dd日 HH:mm:ss");
	    LocalDateTime localDateTime2 = LocalDateTime.parse(str,formatter2);
	    System.out.println(localDateTime2);
	
	}

复制代码输出结果:

复制代码格式化主要有两种情况:

  • 一种是将日期时间格式化成字符串
  • 一种则是将格式化的字符串装换成日期时间对象。

DateTimeFormatter 提供将 format 方法将一个日期时间对象转换成格式化的字符串,但是反过来的操作却建议使用具体的日期时间类自己的 parse 方法,这样可以省去类型转换的步骤。

参考文章
Java 时间与日期处理 - 知乎专栏
Java 8 的时间日期 API

Search

    Table of Contents