时间Date、Calendar、LocalDate 、LocalTime、LocalDateTime、Instant
Date
#获取当前时间Date date = new Date(); #Thu Dec 30 11:59:02 CST 2021#格式化当前时间1Date date = new Date();DateFormat df2 = DateFormat.getDateTimeInstance();String format = df2.format(date); #2021-12-30 12:00:05#格式化时间2Date date = new Date()DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String value = format.format(date); #2021-12-30 12:00:05
#获取时间戳的三种方式long l = System.currentTimeMillis();long timeInMillis = Calendar.getInstance().getTimeInMillis();long time = new Date().getTime();
date获取年月日的方法基本已经作废了就不演示了
Calendar
我们可以把Calendar看做是Date类的增强版,因为Calendar类提供了一组方法,允许将一个以毫秒为单位的时间转换成年、月、日、时、分、秒、星期等。我们可以把Calendar类看做是万年历,默认显示的是当时间,同时也可以查看其他时间。如下:(其实,Calendar底层也是通过new Date() 获取Date实例)
#获取当前时间SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Calendar calendar = Calendar.getInstance();Date date2 = calendar.getTime();String value= dateFormat.format(date2)#获取年int year = calendar.get(Calendar.YEAR); #获取月int month = calendar.get(Calendar.MONTH)+1;//月(从0开始,故要+1):11#获取本月当前时间的日 月有28-31天int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); #方案1int day = calendar.get(Calendar.DATE);#方案2#获取本年当前的日 年有365-366天int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR); #获取当前时间小时int hourOfDay = calendar.get(Calendar.HOUR_OF_DAY); #时(24小时制)int hour = calendar.get(Calendar.HOUR); #时(12小时制)#获取当前时间 分int minute = calendar.get(Calendar.MINUTE); #获取当前时间 秒int second = calendar.get(Calendar.SECOND);#获取当前时间毫秒int millisecond = calendar.get(Calendar.MILLISECOND);#获取星期几 先判断一周的第一天是不是星期天;如果是,则-1;int dayOfWeek = calendar.getFirstDayOfWeek() == Calendar.SUNDAY ? calendar.get(Calendar.DAY_OF_WEEK) - 1 : calendar.get(Calendar.DAY_OF_WEEK);
LocalDate 只包含年月日
获取年月日
#获取当前 年 月 日LocalDate today = LocalDate.now(); #2021-12-30//构造指定的年月日LocalDate localDate = LocalDate.of(1998, 12, 10); #结果2019-09-10#获取当前 年LocalDate today = LocalDate.now(); int year = today.getYear();#获取当前 月LocalDate today = LocalDate.now();Month month = today.getMonthValue();
#获取当前日期是 本周的第几天LocalDate today = LocalDate.now();int value = today.getDayOfWeek().getValue();#获取当前日期是本月的第几天LocalDate today = LocalDate.now();int value = today.getDayOfMonth();#获取当前日期是本年的第几天LocalDate today = LocalDate.now();int value = today.getDayOfYear();#修改该日期的年份LocalDate today = LocalDate.now();LocalDate localDate = today.withYear(1998); #结果 1998-12-30#修改当前的日期的月份LocalDate today = LocalDate.now();LocalDate localDate = today.withMonth(2); #结果 2021-02-28#修改该日期当月的天数LocalDate today = LocalDate.now();LocalDate localDate = today.withDayOfMonth(12);
判断比较
#判断是否是闰年LocalDate today = LocalDate.now();boolean leapYear = today.isLeapYear();#判断该年是356还是366天LocalDate today = LocalDate.now();int value = today.lengthOfYear();#当前月份有多少天LocalDate today = LocalDate.now();int value = today.lengthOfMonth();#比较该日期月其他日期的大小,返回正数 ,那么当前的对象时间较晚(数字较大)LocalDate today = LocalDate.now();LocalDate today2 = LocalDate.now();int value = today.compareTo(today2);#比较该日期是否比参数日期早(true为早)LocalDate today = LocalDate.now();LocalDate today2 = LocalDate.now();LocalDate localDate = today2.withMonth(4); #只能判断年月日,时分秒无法判断,所以这里修改了月份 4boolean before = localDate.isBefore(today);#比较该日期是否比参数日期晚(true为晚)LocalDate today = LocalDate.now();LocalDate today2 = LocalDate.now();LocalDate localDate = today2.withMonth(4);boolean before = localDate.isAfter(today); #比较两个日期是否相等LocalDate today = LocalDate.now();LocalDate today2 = LocalDate.now();LocalDate localDate = today2.withMonth(4);boolean before = localDate.isEqual(today);
在原有的年份上增加年份
#在该日期增加指定年数,也就是当前年份 +n 年LocalDate today = LocalDate.now();LocalDate localDate = today.plusYears(3);#在该日期增加指定月份,也就是当前月+ n 月LocalDate today = LocalDate.now();LocalDate localDate = today.plusMonths(3);#在该日期增加指定周数,也是n周后的日期LocalDate today = LocalDate.now();LocalDate localDate = today.plusWeeks(1);#在该日期增加指定的天数,例如今天30号+1 就是31号LocalDate today = LocalDate.now();LocalDate localDate = today.plusDays(1);
在原有的年份上减少年份
#在该年份上减少年份, 例如2021年减1=2020LocalDate today = LocalDate.now();LocalDate localDate = today.minusYears(1);#在该月份上减少月份, 例如12月减1=11月LocalDate today = LocalDate.now();LocalDate localDate = today.minusMonths(1);#在该日期减少指定的周数, 例如今天8号减1=1号LocalDate today = LocalDate.now();LocalDate localDate = today.minusWeeks(1);#在该日期减少指定天数,今天30号,减1=29号LocalDate today = LocalDate.now();LocalDate localDate = today.minusDays(1);
LocalTime 只包含日期
#获取当前时间LocalTime time = LocalTime.now(); # 10:42:57.151#格式化 当前时间DateTimeFormatter df = DateTimeFormatter.ofPattern("HH:mm:ss");String format = df.format(now); # 11:49:52#构造指定时间LocalTime specificTime = LocalTime.of(12, 12, 12, 12); #结果 12:12:12.000000012#时区指定(Asia/Shanghai,GMT+8)LocalTime timeKolkata = LocalTime.now(ZoneId.of("GMT+8")); #10:48:52.490
LocalDateTime 包含日期和时间 *使用推荐*
#获取秒数Long second = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));#获取毫秒数Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();#获取当前时间LocalDateTime nowTime= LocalDateTime.now(); #2021-12-30T11:43:28.219#当前时间格式化LocalDateTime nowTime= LocalDateTime.now();DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");# 2021-12-30 11:44:32#自定义时间 of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond)LocalDateTime endTime = LocalDateTime.of(2021, 12, 30, 12, 10, 11,00); #2021-12-30T12:10:11#获取年份LocalDateTime nowTime = LocalDateTime.now();int year = nowTime.getYear();#获取月份LocalDateTime nowTime = LocalDateTime.now();int monthValue = nowTime.getMonthValue();#获取日LocalDateTime nowTime = LocalDateTime.now();int dayofMonth = nowTime.getDayOfMonth();#时LocalDateTime nowTime = LocalDateTime.now();int hour = nowTime.getHour();#分LocalDateTime nowTime = LocalDateTime.now();int minute = nowTime.getMinute();#秒LocalDateTime nowTime = LocalDateTime.now();int second = nowTime.getSecond();#星期几LocalDateTime nowTime = LocalDateTime.now();DayOfWeek dayofWeek = nowTime.getDayOfWeek();#今天是今年的第几天LocalDateTime nowTime = LocalDateTime.now();int dayofYear = nowTime.getDayOfYear();
判断比较
#比较该日期是否比参数日期早(true为早)boolean isBefore = nowTime.isBefore(endTime);、#比较该日期是否比参数日期晚(true为晚) boolean isAfter = nowTime.isAfter(endTime); #比较两个日期是否相等(true为相等) boolean euqal =nowTime.equals(endTime);
在原有的年份上减少年份
#在该年份上减少n年份, 例如2021年减1=2020LocalDateTime nowTime = LocalDateTime.now();LocalDateTime minusYears = nowTime.minusYears(1);#在该月份上减少n月份, 例如12月减1=11月LocalDateTime nowTime = LocalDateTime.now();LocalDateTime minusMonths = nowTime.minusMonths(1);#在该日期减少n的周数, 例如今天8号减1=1号LocalDateTime nowTime = LocalDateTime.now();LocalDateTime BeforeWeek = nowTime.minusWeeks(1);#在该日期减少n天数, 例如今天30号,减1=29号LocalDateTime nowTime = LocalDateTime.now();LocalDateTime minusDays = nowTime.minusDays(1);#在该日期减少n小时, 例如现在11点减1=10点LocalDateTime nowTime = LocalDateTime.now();LocalDateTime minusHours = nowTime.minusHours(1);#该日期减少n分钟, 例如现在60分减1=59分LocalDateTime nowTime = LocalDateTime.now();LocalDateTime minusMinutes = nowTime.minusMinutes(1);#该日期减少n秒钟,例如现在60秒减1=59秒LocalDateTime nowTime = LocalDateTime.now();LocalDateTime minusSeconds = nowTime.minusSeconds(1);#灵活的减少 params1,指定增加的数;params2 指定要减少年,月,日还是时,分,秒LocalDateTime nowTime = LocalDateTime.now();LocalDateTime minusTime = nowTime.minus(3, ChronoUnit.MONTHS);
在原有的年份上增加年份
#在该日期增加指定年数,也就是当前年份 +n 年LocalDateTime nowTime = LocalDateTime.now();LocalDateTime plusYears = nowTime.plusYears(1);#在该日期增加指定月份,也就是当前月+ n 月LocalDateTime nowTime = LocalDateTime.now();LocalDateTime plusMonths = nowTime.plusMonths(1);#在该日期增加指定周数,也是n周后的日期LocalDateTime nowTime = LocalDateTime.now();LocalDateTime AfterWeek = nowTime.plusWeeks(1);#在该日期增加指定的天数,例如今天30号+1 就是31号LocalDateTime nowTime = LocalDateTime.now();LocalDateTime plusDays = nowTime.plusDays(1);#在该日期增加n小时, 例如现在10点加1=11点LocalDateTime nowTime = LocalDateTime.now();LocalDateTime plusHours = nowTime.plusHours(1);#该日期增加n分钟, 例如现在59分加1=60分LocalDateTime nowTime = LocalDateTime.now();LocalDateTime plusMinutes = nowTime.plusMinutes(1);#该日期增加n秒钟, 例如现在59秒加1=60秒LocalDateTime nowTime = LocalDateTime.now();LocalDateTime plusSeconds = nowTime.plusSeconds(1);#灵活的增加 params1,指定增加的数;params2 指定要增加年,月,日还是时,分,秒LocalDateTime nowTime = LocalDateTime.now();LocalDateTime plusTime = nowTime.plus(3, ChronoUnit.MONTHS);
Instant
#获取当前时间戳Instant now = Instant.now(); #以ISO-8601输出 2021-12-30T03:23:33.167Z 时间少了八小时Instant now = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(8)); #时间正常 不少八小时#格式化当前时间Instant now = Instant.now();DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneId.systemDefault());String format = dateFormat.format(now); #2021-12-30 11:54:24 没有少八小时#获得当前时间戳并且增加n毫秒Instant instant1 = Instant.now().plusMillis(3);#获得当前时间戳并且减少n毫秒Instant instant2 = Instant.now().minusMillis(3);#比较该日期是否比参数日期晚(true为晚)instant.isAfter(instant1);#比较该日期是否比参数日期早(true为早)instant.isBefore(instant1); #比较两个日期是否相等(true为相等)instant.equals(instant1);#获得当前时间戳并增加1小时 通过TimeUnit.HOURS.toMillis(1)将小时转换为毫秒,然后通过plusMillis增加Instant instant3 = Instant.now().plusMillis(TimeUnit.HOURS.toMillis(1));#获取时间戳instant和instant3相差天数,返回long类型,如果小于1天,都算零天,大于等于1天,小于2天算一天 instant.until(instant3, ChronoUnit.DAYS); #获取时间戳instant和instant3相差的小时数,返回long类型instant.until(instant3, ChronoUnit.HOURS); #获取时间戳instant和instant3相差的毫秒数,返回long类型 instant.until(instant3, ChronoUnit.MILLIS);
实用案例
实体类中可以用这个注解在字段上@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")private Date modifyDate;
时间格式的区别:
2019-12-31 to yyyy-MM-dd: 2019-12-312019-12-31 to YYYY-MM-dd: 2020-12-31y:year-of-era;正正经经的年,即元旦过后;Y:week-based-year;只要本周跨年,那么这周就算入下一年;就比如说今年(2019-2020) 12.31 这一周是跨年的一周,而 12.31 是周二,那使用 YYYY 的话会显示 2020,使用 yyyy 则会从 1.1 才开始算是 2020。
H |
小时(24小时制) |
HH:mm:ss --> 14:53:11 |
h |
小时(12小时制) |
HH:mm:ss --> 14:53:11 |
jsp页面转换时间戳
ajax返回时间格式转换
function renderTime(date) { var dateee = new Date(date).toJSON(); return new Date(+new Date(dateee) + 8 * 3600 * 1000).toISOString().replace(/T/g, ' ').replace(/\.[\d]{3}Z/, '')}
获取昨天日期
public static String getYesterdayStr() { Calendar c = Calendar.getInstance(); c.add(Calendar.DATE, -1); SimpleDateFormat startSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return startSdf.format(c.getTime()); }
获取上周第一天
public static String getWeekStartDay() {Calendar c = Calendar.getInstance();c.set(Calendar.DAY_OF_WEEK,2);c.add(Calendar.DATE, -7);SimpleDateFormat startSdf = new SimpleDateFormat("yyyy-MM-dd 00:00:00");return startSdf.format(c.getTime());}
获取上周最后一天
public static String getWeekEndDay() {Calendar c = Calendar.getInstance();c.set(Calendar.DAY_OF_WEEK,2);c.add(Calendar.DATE, -1);SimpleDateFormat endSdf = new SimpleDateFormat("yyyy-MM-dd 23:59:59");return endSdf.format(c.getTime());}
获取上月第一天
public static String getMonthStartDay() {Calendar c = Calendar.getInstance();c.add(Calendar.MONTH, -1);c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.getActualMaximum(Calendar.DAY_OF_MONTH), 23, 59, 59);SimpleDateFormat startSdf = new SimpleDateFormat("yyyy-MM-01 00:00:00");return startSdf.format(c.getTime());}
获取上月最后一天
public static String getMonthEndDay() {Calendar c = Calendar.getInstance();c.add(Calendar.MONTH, -1);c.set(c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.getActualMaximum(Calendar.DAY_OF_MONTH), 23, 59, 59);SimpleDateFormat endSdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return endSdf.format(c.getTime());}
常用时间转换工具类
public class DateUtils { /** * Date转LocalDate * @param date */ public static LocalDate date2LocalDate(Date date) { if(null == date) { return null; } return date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); } /** * LocalDateTime转毫秒时间戳 * @param localDateTime LocalDateTime * @return 时间戳 1640828236888 */ public static Long localDateTimeToTimestamp(LocalDateTime localDateTime) { try { ZoneId zoneId = ZoneId.systemDefault(); Instant instant = localDateTime.atZone(zoneId).toInstant(); return instant.toEpochMilli(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * 时间戳转LocalDateTime * @param timestamp 时间戳 * @return LocalDateTime */ public static LocalDateTime timestampToLocalDateTime(long timestamp) { try { Instant instant = Instant.ofEpochMilli(timestamp); ZoneId zone = ZoneId.systemDefault(); return LocalDateTime.ofInstant(instant, zone); } catch (Exception e) { e.printStackTrace(); } return null; } /** * Date转LocalDateTime * @param date Date * @return LocalDateTime */ public static LocalDateTime dateToLocalDateTime(Date date) { try { Instant instant = date.toInstant(); ZoneId zoneId = ZoneId.systemDefault(); return instant.atZone(zoneId).toLocalDateTime(); } catch (Exception e) { e.printStackTrace(); } return null; } /** * LocalDateTime转Date * @param localDateTime LocalDateTime * @return Date */ public static Date localDateTimeToDate(LocalDateTime localDateTime) { try { ZoneId zoneId = ZoneId.systemDefault(); ZonedDateTime zdt = localDateTime.atZone(zoneId); return Date.from(zdt.toInstant()); } catch (Exception e) { e.printStackTrace(); } return null; } /** * String转Date * @param String dateStr * @return Date */ public static Date stringToDate(String dateStr){ DateFormat format1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { Date date = format1.parse(dateStr); return date } catch (ParseException e) { e.printStackTrace(); } return null; } }
网上案例:
统计昨天、当月、上月、本周的SQL语句统计上周的数据:select * from tb where datediff( wk, C_DATETIME, '2010-01-25 13:43:47.000') = 1select * from tb where datediff( wk, C_DATETIME, getdate() ) = 1统计昨天的数据:SELECT * FROM `orders` WHERE DAY(ordertime)=(DAY(NOW())-1) //能使用 统计当月的数据:select * from tb where datediff(mm,C_DATETIME,'2009-10-30 15:05:00.170')=0 --当月select * from tb where datediff(mm,C_DATETIME,getdate())=0 --当月统计当年的数据:select * from tb where datediff(year,C_DATETIME,'2009-10-30 15:05:00.170')=0 --当年select * from tb where datediff(year,C_DATETIME,getdate())=0 --当年统计上月的数据:select * from tb where month(C_DATETIME)=(month('2009-07-30 15:05:00.170')-1) --group by Userid --上月的select sum(Marks),Userid from BBSScore where month(CreateDate)=(month(getdate())-1) group by Userid select * from dbo.Web_UserAccount where datediff(week,C_DATETIME,getdate())=0 --C_DATETIME为日期字段 本周:select * from dbo.Web_UserAccount where datediff(Month,C_DATETIME,getdate())=0 --C_DATETIME为日期字段 本月:select * from dbo.Web_UserAccount where datediff(qq,C_DATETIME,getdate())=0 --C_DATETIME为日期字段 本季:select * from dbo.Web_UserAccount where datepart(mm,C_DATETIME)/7 = datepart(mm,getdate())/7 --前半年1-6,后半年7-12: 一天 "select * from T_news where datediff(day,addtime,getdate())=0";三天 "select * from T_news where datediff(day,addtime,getdate())= 0";一周 "SELECT * FROM T_news WHERE (DATEPART(wk, addtime) = DATEPART(wk, GETDATE())) AND (DATEPART(yy, addtime) = DATEPART(yy, GETDATE()))";一月"SELECT * FROM T_news WHERE (DATEPART(yy, addtime) = DATEPART(yy, GETDATE())) AND (DATEPART(mm, addtime) = DATEPART(mm, GETDATE()))";一季度 "select * from t_news where DATEPART(qq, addtime) = DATEPART(qq, GETDATE()) and DATEPART(yy, addtime) = DATEPART(yy, GETDATE())";其中T_news是表名,addtime是数据库中对于的时间列
个人案例
SELECT COUNT(*) FROM `orders` WHERE DAY(ordertime)=(DAY(NOW())-1) AND state=1 #昨天待发货订单SELECT COUNT(*) FROM `orders` WHERE DAY(ordertime)=(DAY(NOW())-1) AND state>=1 #昨天成交订单SELECT COUNT(*) FROM `orders` WHERE DAY(ordertime)=(DAY(NOW())) AND state=1 #今日待发货订单SELECT COUNT(*) FROM `orders` WHERE DAY(ordertime)=(DAY(NOW())) AND state>=1 #今日成交订单SELECT COUNT(*) FROM `orders` WHERE WEEK(ordertime)=(WEEK(NOW())) AND state=1 #本周待发货订单SELECT COUNT(*) FROM `orders` WHERE WEEK(ordertime)=(WEEK(NOW())) AND state>=1 #本周成交订单SELECT COUNT(*) FROM `orders` WHERE MONTH(ordertime)=(MONTH(NOW())) AND state=1 #本月待发货订单SELECT COUNT(*) FROM `orders` WHERE MONTH(ordertime)=(MONTH(NOW())) AND state>=1 #本月成交订单ordertime 时间字段
oracle中时间转换
字符串转date
SELECT * from WHERE TO_DATE('1994-06-07', 'yyyy-mm-dd')=字段名
date转字符串
SELECT * FROM employeesWHERE to_char(字段名,’yyyy-mm-dd’)=’2019-10-1’
中文年月日
查询员工表中的入职时间为1994年06月07日Select * from employees where to_char(hire_date,'yyyy"年"mm"月"dd"日"') = '1994年06月07日'
以上小编学习开发中使用&总结,如果对你有帮助就帮忙点个小赞(^人^),如有侵权联系小编!