Java基础-时间函数Date的相关使⽤
在⽇常Java开发中,常常会使⽤到Date的相关操作,如:获取当前系统时间、获取当前时间戳、时间戳按指定格式转换成时间等。以前⽤到的时候,⼤部分是去⽹上,但事后⼜很快忘记。现为⽅便⾃⼰今后查阅,也⽅便各位猿友学习探讨,在此将我们常⽤的时间实例、函数归纳罗列出来,供⼤家参考,如有不对,欢迎在评论区共同探讨。
1
获取系统当前时间,我们经常会⽤到,如:判断优惠券是否已经过期、更新某条数据的时间等。(当然,这些也可以在sql中进⾏)
⽅法⼀:
Date类对象是⽤来表⽰时间和⽇期的,这个类提供了⼀系列操作时间和⽇期的函数,获取系统当前时间就是我们最常⽤的。如下:
1public static void main(String[] args) {
2 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
3 SimpleDateFormat dateForm2
4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
4 Date date1 = new Date();
5 System.out.println("系统当前时间是(未格式化):" + date1);
6 System.out.println("系统当前时间是(已格式化):" + dateFormat.format(date1));
7 System.out.println("系统当前时间是(格式-24):" + dateForm24.format(date1));
8 }
9控制台输出:
10系统当前时间是(未格式化):Fri Dec 27 16:43:47 CST 2019
11系统当前时间是(已格式化):2019-12-27 04:43:47
12系统当前时间是(格式-24):2019-12-27 16:43:47
从控制台输出,我们可以看到,同⼀个时间有三种表达样式。这⾥解释⼀下,第⼀种是格林威治时间格式,这通常不是我们想要的结果,所以引⼊了后两种。
后两种我们使⽤了时间⽇期格式化类(SimpleDateFormat)来把时间格式化成我们想要的样式。这⾥需要注意的是,后两种在“⼩时”的样式上略有不同,⼩写的“hh”表⽰12⼩时制,⼤写的“HH”则为24⼩时制,我们使⽤时可根据需求⽽定。
⽅法⼆:
除了Date类,我们还经常使⽤Calendar类来操作时间和⽇期,我们可以把它看做是Date类的增强版,因为Calendar类提供了⼀组⽅法,允许将⼀个以毫秒为单位的时间转换成年、⽉、⽇、时、分、秒、星期等。我们可以把Calendar类看做是万年历,默认显⽰的是当时间,同时也可以查看其他时间。如下:(其实,Calendar底层也是通过new Date() 获取Date实例)
1public static void main(String[] args) {
2 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
3 Calendar calendar = Instance();
4 Date date2 = Time();
5 System.out.println("系统当前时间是:" + dateFormat.format(date2));
6//还可以使⽤[年⽉⽇时分秒]拼接的⽅式获取;
7int year = (Calendar.YEAR); //年
8int month = (Calendar.MONTH)+1; //⽉(从0开始,故要+1):11
9//星期⼏:先判断⼀周的第⼀天是不是星期天;如果是,则-1;
10int dayOfWeek = FirstDayOfWeek()==Calendar.(Calendar.DAY_OF_WEEK)-(Calendar.DAY_OF_WEEK);
11int dayOfYear = (Calendar.DAY_OF_YEAR); //⽇(年的第N⽇)
12int dayOfMonth = (Calendar.DAY_OF_MONTH); //⽇(⽉的第N⽇)
java时间日期格式转换13int day = (Calendar.DATE); //⽇(同上)
14int hourOfDay = (Calendar.HOUR_OF_DAY); //时(24⼩时制)
15int hour = (Calendar.HOUR); //时(12⼩时制)
16int minute = (Calendar.MINUTE); //分
17int second = (Calendar.SECOND); //秒
18int millisecond = (Calendar.MILLISECOND);
19 System.out.println("现在是:"+year+"年"+month+"⽉"+day+"⽇"
20 +hourOfDay+"点("+hour+"点)"+minute+"分"+second+"秒"+millisecond
21 +"毫秒,星期"+dayOfWeek+",这是"+year+"年的第"+dayOfYear+"天.");
22 }
23
24控制台输出:
25系统当前时间是:2019-12-27 17:16:17
26现在是:2019年12⽉27⽇17点(5点)16分17秒94毫秒,星期5,这是2019年的第361天.
这⾥有两个地⽅需要注意:
1、获取⽉份:int month = (Calendar.MONTH)+1; 直接获取到的⽉份默认是从0开始的,即当前12⽉获取到的是11,所以这⾥要 +1;
2、获取星期:上⾯我⽤了个三元,拆开来就是要⽐较【⼀周的第⼀天是不是周⽇】。
1//int dayOfWeek = FirstDayOfWeek()==Calendar.(Calendar.DAY_OF_WEEK)-(Calendar.DAY_OF_WEEK); 2//当前星期⼏
3int dayOfWeek = (Calendar.DAY_OF_WEEK);
4//⼀周的第⼀天
5int firstDayOfWeek = FirstDayOfWeek();
6//星期⽇
7int sunday = Calendar.SUNDAY;
8//如果⼀周的第⼀天是星期⽇,则需要-1;
9if (firstDayOfWeek==sunday){
10 dayOfWeek --;
11 }
println("今天是星期" + dayOfWeek);
⽅法三:
除了直接获取时间,我们还可以通过获取当前时间的毫秒值,然后再转换成时间。
1public static void main(String[] args) {
2 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
3long nowLong=System.currentTimeMillis(); //获取出来的是当前时间的毫秒值
4//把毫秒值转换成时间格式
5 Date date = new Date();
6 date.setTime(nowLong);
7 System.out.println("系统当前时间是:" + dateFormat.format(date));
8 }
9//控制台输出:
10// 系统当前时间是:2019-12-27 18:00:00 --->这是什么意思
Tip:以上就是获取系统当前时间的三种⽅式,各位⼤佬有其他更好的⽅式,欢迎评论区补充。
2
Tip:通过观察可以发现,前⼀天和后⼀天只是修改了 -1 和 +1 这两个值。
private static void getYesterday() {
//获取前⼀天的时间
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
Calendar calendar = Instance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, -1);
date = Time();
System.out.println("当前时间是:" + (format.format(new Date())) + ",昨天是:" + (format.format(date)));
//>>>> 当前时间是:2020-06-23 14:53:15,昨天是:2020-06-22 14:53:15
}
private static void geTomorrow() {
//获取前⼀天的时间
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date = new Date();
Calendar calendar = Instance();
calendar.setTime(date);
calendar.add(Calendar.DAY_OF_MONTH, +1);
date = Time();
System.out.println("当前时间是:" + (format.format(new Date())) + ",明天是:" + (format.format(date)));
//>>>> 当前时间是:2020-06-23 14:53:15,明天是:2020-06-24 14:53:15
}
3
要获取某个时间的整点时间,主要在使⽤格式的时候,把格式设置为 HH:00:00 ;
private static void getHour() throws ParseException {
/
/获取某个时间的整点时间;
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(date);
//获取整点时间,主要是使⽤这个 HH:00:00 的时间格式;
SimpleDateFormat hourFormatter = new SimpleDateFormat( "yyyy-MM-dd HH:00:00");
String hourStr = hourFormatter.format(date);
System.out.println("当前时间是:" + dateStr + ",整点时间是:" + hourStr);
//>>>> 当前时间是:2020-06-23 14:50:22,整点时间是:2020-06-23 14:00:00
}
4
private static void getOneHourAgo() throws ParseException {
//获取前(往后)⼀⼩时的时间
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//这⾥设置你想要的时间
Date date = new Date();
Calendar calendar = Instance();
calendar.setTime(date);
//提前的时间⽤-1,往后的时间⽤+1;
calendar.add(Calendar.HOUR_OF_DAY, +1);
date = Time();
System.out.println("当前时间是:" + sdf.format(new Date()) + ",前⼀⼩时是:" + sdf.format(date));
/
/>>>> 当前时间是:2020-06-23 15:02:55,前⼀⼩时是:2020-06-23 16:02:55
}
5
private static void compareTime() throws ParseException {
//两个时间进⾏⽐较,往往是我们⽐较头疼的,⽤下⾯的⽅法,简单明了,简直是⽌痛神药!
String DateStr1 = "2018-03-01 00:01:01";
String DateStr2 = "2024-12-10 15:50:35";
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date dateTime1 = dateFormat.parse(DateStr1);
Date dateTime2 = dateFormat.parse(DateStr2);
Calendar calendar = Instance();
Date systemDate = Time();
int ago = dateTime1pareTo(systemDate);
int future = dateTime2pareTo(systemDate);
System.out.println("以前的时间:" + ago + ",未来的时间:" + future);
//>>>> 以前的时间:-1,未来的时间:1 ;
}
Tip:
两个Date类型的变量可以通过 date1pareTo(date2);⽅法来⽐较。此⽅法的描述是这样的: 如果参数 date1 等于此 date2,则返回值 0;
如果此 date1 在 date2 参数之前,则返回⼩于 0 的值;
如果此 date2 在 date2 参数之后,则返回⼤于 0 的值。
实际上⽐较的是⾃1970 年 1 ⽉ 1 ⽇ 00:00:00 GMT以来的毫秒数。毫秒数越⼤的时间越⼤。
6
我们在数据库
public static void getTimeDifference() throws ParseException {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date date1 = dateFormat.parse("2020-05-01 18:53:40");
Date date2 = new Date();
//⼀天的毫秒数
long d = 1000 * 24 * 60 * 60;
//⼀⼩时的毫秒数
long h = 1000 * 60 * 60;
//⼀分钟的毫秒数
long m = 1000 * 60;
// long ns = 1000;
// 获得两个时间的毫秒时间差异
long timeDiff = Math.Time() - Time());
// 计算差多少天
long day = timeDiff / d;
// 计算差多少⼩时
long hour = timeDiff % d / h;
long hour01 = timeDiff / h;
// 计算差多少分钟
long min = timeDiff % d % h / m;
/
/输出结果
System.out.println("当前时间是:" + dateFormat.format(date2));
System.out.println("⽐较时间是:" + dateFormat.format(date1));
System.out.println("间隔:" + day + "天" + hour + "⼩时" + min + "分钟");
/*
当前时间是:2020-06-23 15:59:33
⽐较时间是:2020-05-01 18:53:40
间隔:52天21⼩时5分钟
*/
}
Tip:这⾥使⽤了Math.abs()函数取绝对值,如果不⽤这个函数,那就需要注意⼀下哪个时间减哪个时间;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论