Java日期时间处理

Java日期时间

知识扩展

什么是闰秒?
【百度百科解释】闰秒,是指为保持协调世界时接近于世界时时刻,由国际计量局统一规定在年底或年中(也可能在季末)对协调世界时增加或减少1秒的调整。由于地球自转的不均匀性和长期变慢性(主要由潮汐摩擦引起的),会使世界时(民用时)和原子时之间相差超过到±0.9秒时,就把协调世界时向前拨1秒(负闰秒,最后一分钟为59秒)或向后拨1秒(正闰秒,最后一分钟为61秒); 闰秒一般加在公历年末或公历六月末。全球已经进行了27次闰秒,均为正闰秒。最近一次闰秒在北京时间2017年1月1日7时59分59秒(时钟显示07:59:60)出现。这也是本世纪的第五次闰秒。

Date类

java.lang.Date

构造方法

Date():创建当前的时间对象
Date​(long date):该参数是从 1970 年 1 月 1 日起的毫秒数。

具体方法

变量和类型方法描述
booleanafter​(Date when)测试此日期是否在指定日期之后
booleanbefore​(Date when)测试此日期是否在指定日期之前
intcompareTo​(Date anotherDate)比较两个日期的订购
booleanequals​(Object obj)比较两个相等的日期
static Datestatic Date从 Instant对象获得 Date的实例
longgetTime()返回自此 Date对象表示的1970年1月1日00:00:00 GMT以来的毫秒数
inthashCode()返回此对象的哈希码值
voidsetTime()将此 Date对象设置为表示格林尼治标准时间1970年1月1日00:00:00之后的 time毫秒的时间点
InstanttoInstant()将此 Date对象转换为 Instant
StringtoString()将此 Date对象转换为 String类型

代码示例:

import java.util.Date;
public class Test {
   public static void main(String[] args) {
	   //1.创建系统当前时间
	   Date date1 = new Date();
	   //2.创建从 1970 年 1 月 1 日起127846184毫秒的时间
	   Date date2 = new Date(127846184);
	   //3.时间输出
	   System.out.println("date1:"+date1);//date1:Wed Apr 27 14:54:03 JST 2022
	   System.out.println("date2:"+date2.toString());//date2:Fri Jan 02 20:30:46 JST 1970
	   //4.时间的比较
	   date1.after(date2);//true
	   date1.before(date2);//false
	   date1.equals(date2);//false
	   //getTime()获取date距离 1970 年 1 月 1 日的毫秒数
	   System.out.println(date1.getTime()==date2.getTime());//false
	   System.out.println(date1.compareTo(date2));//true
	   date1.clone();	   
   }
}

SimpleDateFormat格式化日期时间

SimpleDateFormat是一个用于以区域设置敏感的方式格式化和解析日期的具体类。 它允许格式化(日期→文本),解析(文本→日期)和规范化。

SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh:mm:ss");

这一行代码确立了转换的格式,其中 yyyy 是完整的公元年,MM 是月份,dd 是日期,HH:mm:ss 是时、分、秒。

时间和日期的编码化格式

import java.text.SimpleDateFormat;
import java.util.Date;
public class SimpleDateFormatTest {
	public static void main(String[] args) {
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("G:yyyy:MM:dd,HH:mm:ss:E");
		System.out.println(sdf.format(date));
	}
}

时间模式字符串用来指定时间格式。在此模式中,所有的 ASCII 字母被保留为模式字母,定义如下:

字母描述示例
G纪元标记AD
y四位年份2001
M月份July or 07
d一个月的日期10
hA.M./P.M. (1~12)格式小时12
H一天中的小时 (0~23)22
m分钟数30
s秒数55
S毫秒数234
E星期几Tuesday
D一年中的日子360
F一个月中第几周的周几2 (second Wed. in July)
w一年中第几周40
W一个月中第几周1
aA.M./P.M. 标记PM
k一天中的小时(1~24)24
KA.M./P.M. (0~11)格式小时10
z时区Eastern Standard Time
文字定界符Delimiter
"单引号`

使用printf格式化日期

printf 方法可以很轻松地格式化时间和日期。使用两个字母格式,它以 %t 开头并且以下面表格中的一个字母结尾。

转 换 符说 明示 例
c包括全部日期和时间信息星期六 十月 27 14:21:20 CST 2007
F"年-月-日"格式2007-10-27
D"月/日/年"格式10/27/07
r"HH:MM:SS PM"格式(12时制)02:25:51 下午
T"HH:MM:SS"格式(24时制)14:28:16
R"HH:MM"格式(24时制)14:28
import java.util.Date;
public class SimpleDateFormatTest {
	public static void main(String[] args) {	
		Date date = new Date();
	     //c的使用  
	    System.out.printf("全部日期和时间信息:%tc%n",date);          
	    //f的使用  
	    System.out.printf("年-月-日格式:%tF%n",date);  
	    //d的使用  
	    System.out.printf("月/日/年格式:%tD%n",date);  
	    //r的使用  
	    System.out.printf("HH:MM:SS PM格式(12时制):%tr%n",date);  
	    //t的使用  
	    System.out.printf("HH:MM:SS格式(24时制):%tT%n",date);  
	    //R的使用  
	    System.out.printf("HH:MM格式(24时制):%tR",date);  		
	}
}

输出结果:

全部日期和时间信息:星期一 九月 10 10:43:36 CST 2012  
年-月-日格式:2012-09-10  
月/日/年格式:09/10/12  
HH:MM:SS PM格式(12时制):10:43:36 上午  
HH:MM:SS格式(24时制):10:43:36  
HH:MM格式(24时制):10:43  

Java睡眠(sleep)

sleep()使当前线程进入停滞状态(阻塞当前线程),让出CPU的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会。
利用sleep方法测试时间间隔:

import java.util.Date;
public class SleepTest {
	public static void main(String[] args) {
		try {
			long start = System.currentTimeMillis();
			System.out.println("睡眠之前时间"+new Date());
			Thread.sleep(5*60*15);
			System.out.println("睡眠之后时间:" + new Date());
			long end = System.currentTimeMillis();
			System.out.println(end-start);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
}

Calendar类

Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法calendar fields如YEAR , MONTH , DAY_OF_MONTH , HOUR ,等等,以及用于操纵该日历字段,如获取的日期下个星期。

创建Calendar对象

Calendar c = Calendar.getInstance();//默认是当前日期
//创建指定时间对象
Calendar c1 = Calendar.getInstance();
c1.set(2021, 6 - 1, 12);

Calendar对象字段

常量描述
Calendar.YEAR年份
Calendar.MONTH月份
Calendar.DATE日期
Calendar.DAY_OF_MONTH日期,和上面的字段意义完全相同
Calendar.HOUR12小时制的小时
Calendar.HOUR_OF_DAY24小时制的小时
Calendar.MINUTE分钟
Calendar.SECOND
Calendar.DAY_OF_WEEK星期几

Calendar类API


版权声明:本文为weixin_46137395原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。