获取从1970年1月1日到程序运行时的毫秒数的方法有两种,一种是用date.getTime方法,另一种是System.currentTimeMIllis方法
1.获取日期时间
@Test
public void test01(){
//标准时间 UTC 协调时间时
//GMT 格林威治时间
Date date = new Date();
//得到 Fri Apr 15 11:24:05 CST 2022 时间
System.out.println(date);
//获取从1970年1月1日起到程序运行时的毫秒数
long time = date.getTime();
System.out.println(time);
//获取从1970年开始到程序运行时的毫秒数
long millis = System.currentTimeMillis();
System.out.println(millis);
}
2.更改日期时间格式
实例化Date后得到的时间格式Fri Apr 15 11:24:05 CST 2022不符合我们的观看习惯,可以用程序改写提升观看体验
@Test
public void test02(){
StringBuffer dateTest = new StringBuffer();
Date date = new Date();
int year = date.getYear()+1900; //获取年份
dateTest.append(year+"年");
int month = date.getMonth()+1;//方法中用了0-11代表12个月
dateTest.append(month < 10 ?"0" +month + "月" : month + "月");
int day =date.getDate();//用getDate不是Day方法,day方法是周几
dateTest.append(day < 10 ? "0" + day + "日" : day + "日");
int hour =date.getHours() + 1;
dateTest.append(hour < 10 ? "0" + hour + "时" : hour + "时");
int minute = date.getMinutes() + 1;
dateTest.append(minute < 10 ? "0" + minute + "分" : minute + "分");
int second = date.getSeconds() + 1;
dateTest.append(second < 10 ? "0" + second + "秒" :second + "秒");
String week = "星期";
int dayOfWeek = date.getDay();
switch (dayOfWeek){
case 1 -> week += "一";
case 2 -> week += "二";
case 3 -> week += "三";
case 4 -> week += "四";
case 5 -> week += "五";
case 6 -> week += "六";
default -> week += "日";
}
dateTest.append(" " +week);
System.out.println(dateTest.toString());
//结果 2022年04月15日12时36分29秒 星期五
}
先创建一个字符串,然后用date.get方法获取年月日时间小时分钟秒数,通过字符串添加方法加这些内容添加到字符串中去,在月、日、时、分、秒中可能有一位数和两位数共同存在,通过三目运算在一位数前面补0来让格式更完整。
在date.getYear中,获取到的年份是从1900年开始计算的的,获取年份加1900的和才为实际年份。
在获取月、日、时、分、秒方法中,都是从0开始计算的,所以实际数值应该为获取数值+1。
在获取日期时用的为date.getDate方法,而非date.getDay方法,getDay方法为获取星期数的方法,0代表星期日,1-6代表星期一到星期六。
3.时间模板
@Test
public void test03(){
Date date = new Date();
//结果 Fri Apr 15 11:48:10 CST 2022
System.out.println(date);
// 实例化一个时间字符串格式对象 并传入时间字符串模板
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//更改时区
dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
//将日期对象根据时间模板格式化为时间字符串
String format =dateFormat.format(date);
//结果 2022-04-15 12:48:10
System.out.println(format);
String source ="1993-11-06 22:30:00";
try {
Date parse = dateFormat.parse(source);
//结果 Sat Nov 06 21:30:00 CST 1993
System.out.println(parse);
}catch (ParseException e){
throw new RuntimeException(e);
}
}
dateFormat.parse方法可能会异常,需要用try{}catch{}方法来写
4.比较时间的前后
@Test
public void test04(){//比较时间前后
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String text01 = "1983-11-22 20:30:00";
String text02 = "1988-08-11 20:30:00";
try {
//将两个时间字符串变为时间Date
Date date01 = dateFormat.parse(text01);
Date date02 = dateFormat.parse(text02);
boolean isBefore = date01.getTime() - date02.getTime() < 0 ? true : false;
boolean isAfter = date01.getTime() - date02.getTime() > 0 ? true : false;
System.out.println(isBefore); //结果 true
System.out.println(isAfter); // 结果 false
System.out.println(date01.before(date02)); //结果 true
System.out.println(date01.after(date02)); //结果 false
} catch (ParseException e) {
throw new RuntimeException(e);
}
}
比较时间的前后有两种方法1.将两个时间到1970的时间毫秒差进行比较,毫秒差大的则时间在靠后,毫秒差小的时间靠前。
变量名isBfore确认靠前的,date01的毫秒差 - date02的毫秒差 < 0则 date01靠前返回true。
2.直接用before、after方法进行比较,返回值为布尔型。
5.locale方法快捷获取本地时间
@Test
public void test05(){
Date date = new Date();
System.out.println(date);
//输出格林威治日期时间
String gmtString = date.toGMTString();
//本地输出日期时间
String localeString = date.toLocaleString();
System.out.println(gmtString);
System.out.println(localeString);
}
date.toGMTString方法获得格林威治的对应时间
date.toLocaleString方法获得本地时间(适应阅读习惯)
6.更改时区
@Test
public void test06(){
//获取默认时区信息 sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=31,lastRule=null]
System.out.println(TimeZone.getDefault());
// 定义时间字符串格式化模板
SimpleDateFormat tokyoSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// 格式化的时候设置时区
tokyoSdf.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo"));
// 获取当前时间对象
Date tokyoDate = new Date();
// 将当前时间对象使用定义好的时间字符串模板格式化
String tokyoDateText = tokyoSdf.format(tokyoDate);
System.out.println(tokyoDateText);
System.out.println("********");
SimpleDateFormat NewYorkSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
NewYorkSdf.setTimeZone(TimeZone.getTimeZone("American/New York"));
Date NewYorkDate = new Date();
String newYorkDateText = NewYorkSdf.format(NewYorkDate);
System.out.println(newYorkDateText);
}
7.时间毫秒数更改时间
@Test
public void test07(){
long time = System.currentTimeMillis();//获得1970年1月1日到现在的时间毫秒数
time -= 1000 * 60 * 60;//减去一小时
Date date = new Date(time);
//结果 Fri Apr 15 11:32:37 CST 2022
System.out.println(date);
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
String format = dateFormat.format(date);
//结果 2022-04-15 11:32:37
System.out.println(format);
}
1秒 =1000毫秒,1分钟=60秒,1小时=60分钟,
time为时间毫秒数,减去1000*60*60即减去一小时
版权声明:本文为tswqezg原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。