小刘整理了java中对时间的常用操作,封装了几种方法,简单方便,开箱即用。时间转字符串格式,字符串转时间,以及过去和未来的日期。除此之外,还新增了时间戳之差计算时分秒天的具体方案。
public static void main(string[] args) {
system.out.println("过去七天的日期:" pastdate(7,calendar.day_of_year,"yyyy-mm-dd"));
system.out.println("过去一年的日期:" pastdate(1,calendar.year,"yyyy-mm-dd"));
date date = new date();
system.out.println("时间戳转日期:" timestamptodate(date.gettime()));
string str = datetostr(date, "yyyy-mm-dd hh:mm:ss");
system.out.println("日期转字符串日期;" str);
system.out.println("字符串日期转日期" strtodate(str,"yyyy-mm-dd hh:mm:ss"));
system.out.println("校验是否是时间:" validdate("2023-23.32"));
}
public static void main(string[] args) {
string s="2023-11-20 15:10:00";
date start = strtodate(s, "yyyy-mm-dd hh:mm:ss");
string end="2023-11-20 15:20:30";
date endt = strtodate(end, "yyyy-mm-dd hh:mm:ss");
string along = durationtime(start,endt);
system.out.println(s);
system.out.println(end);
system.out.println(along);
}
/**获取过去日期 之后【】->
* 年月日时分秒:yyyy-mm-dd hh:mm:ss
* 年月日:yyyy-mm-dd
* @param past 过去几个
* @param unit 单位 day_of_year【天】week_of_year【周】 month【月】
* @param pattern
* @return
*/
public static string pastdate(integer past,integer unit,string pattern) {
calendar calendar = calendar.getinstance();
calendar.set(unit, calendar.get(unit) - past);
date today = calendar.gettime();
simpledateformat format = new simpledateformat(pattern);
string result = format.format(today);
return result;
}
/**
* 时间戳转换为时间
* 10位为秒级时间戳
* 13位为毫秒级时间戳
* @param time
* @return
*/
public static date timestamptodate(long time){
date date = new date(time.tostring().length() > 10 ? time : time * 1000l);
return date;
}
/**
* 获取时间格式化
* 年月日时分秒:yyyy-mm-dd hh:mm:ss
* 年月日:yyyy-mm-dd
* @param date
* @param pattern
* @return
*/
public static string datetostr(date date,string pattern) {
simpledateformat format = new simpledateformat(pattern);
return format.format(date);
}
/**
* 字符串时间转时间
* 年月日时分秒:yyyy-mm-dd hh:mm:ss
* 年月日:yyyy-mm-dd
* @param time
* @param pattern
* @return
*/
public static date strtodate(string time,string pattern){
simpledateformat sdf = new simpledateformat(pattern);
try {
date date = sdf.parse(time);
return date;
} catch (parseexception e) {
e.printstacktrace();
}
return null;
}
/**
* 校验时间是否是日期格式的字符串
* @param str
*/
public static boolean validdate(string str) {
boolean time = true;
boolean date = true;
// 指定日期格式为四位年/两位月份/两位日期,注意yyyy/mm/dd区分大小写;
simpledateformat formatdatetime = new simpledateformat("yyyy-mm-dd hh:mm:ss");
simpledateformat formatdate = new simpledateformat("yyyy-mm-dd");
try {
formatdatetime.parse(str);
} catch (parseexception e) {
time = false;
}
try {
formatdate.parse(str);
} catch (parseexception e) {
date = false;
}
if (!time && !date) {
system.out.println("请输入正确的日期格式【yyyy-mm-dd/yyyy-mm-dd hh:mm:ss】");
}
return time || date;
}
/**
* 时间间隔
* 多少分钟between.tominutes();
* 多少天between.todays();
* 多少秒between.getseconds();
* 多少分钟多少秒
* @param starttime
* @param endtime
* @return
*/
public static string durationtime(date starttime, date endtime) {
localdatetime start = localdatetime.ofinstant(optional.ofnullable(starttime).orelse(new date()).toinstant(), zoneid.systemdefault());
localdatetime end = localdatetime.ofinstant(optional.ofnullable(endtime).orelse(new date()).toinstant(), zoneid.systemdefault());
duration between = duration.between(start, end);
between.getseconds();
string msg=between.tominutes() "分钟" (between.getseconds()-between.tominutes()*60) "秒";
return msg;
}
结尾
时间不一定能证明很多东西,但一定会让你看透很多东西。一眼就能看得到头,不是我们想要的生活,我们为之努力,是努力让自己的生活多一种可能,给自己的未来多一份惊喜。