2025年java基础之时间类型

java基础之时间类型Date Date 类主要封装了系统的日期和时间的信息 表示系统特定的时间戳 可以精确到毫秒 Date 对象表示时间的默认顺序是星期 月 日 小时 分 秒 年 构造方法 Date 使用该构造方法创建的对象可以获取本地的当前时间 Date long date 表示从 GMT 时间 1970 年 1 月 1 日

大家好,我是讯享网,很高兴认识大家。

Date

Date 类主要封装了系统的日期和时间的信息,表示系统特定的时间戳,可以精确到毫秒。Date 对象表示时间的默认顺序是星期、月、日、小时、分、秒、年。

构造方法

Date():使用该构造方法创建的对象可以获取本地的当前时间。

Date(long date):表示从 GMT 时间1970 年 1 月 1 日 0 时 0 分 0 秒开始经过参数 date 指定的毫秒数。

Date date1 = new Date(); // 1、调用无参数构造函数 System.out.println(date1.toString()); // 输出:Wed May 18 21:24:40 CST 2016 Date date2 = new Date(60000); // 2、调用含有一个long类型参数的构造函数 System.out.println(date2); // 输出:Thu Jan 0108:01:00 CST 1970

讯享网

常用方法

方法 描述
boolean after(Date when) 判断此日期是否在指定日期之后
boolean before(Date when) 判断此日期是否在指定日期之前
int compareTo(Date anotherDate) 比较两个日期的顺序
boolean equals(Object obj) 比较两个日期的相等性
long getTime() 返回自 1970 年 1 月 1 日 00:00:00 GMT 以来,此 Date 对象表示的毫秒数
String toString() 把此 Date 对象转换为以下形式的 String: dow mon dd hh:mm:ss zzz yyyy。
其中 dow 是一周中的某一天(Sun、Mon、Tue、Wed、Thu、Fri 及 Sat)

时间格式

yyyy:年  
MM:月  
dd:日  
hh:1~12小时制(1-12)  
HH:24小时制(0-23)  
mm:分  
ss:秒  
S:毫秒  
E:星期几  
D:一年中的第几天  
F:一月中的第几个星期(会把这个月总共过的天数除以7)  
w:一年中的第几个星期  
W:一月中的第几星期(会根据实际情况来算)  
a:上下午标识  
k:和HH差不多,表示一天24小时制(1-24)。  
K:和hh差不多,表示一天12小时制(0-11)。  
z:表示时区    

常见用法

StringDate

讯享网// String 转 Date String str = "1957-3-23 00:00:00"; //1、定义转换格式 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //2、将str转化为date类型 输出为:Sat Mar 23 00:00:00 GMT+08:00 1957 Date date = formatter.parse(str); //--------------------------------------------------------------------------- // Date转String //1、定义转换格式 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); //2、将当前时间转化为String类型 String dateString = formatter.format(new Date());

获取n分钟前的时间

Date now = new Date(); //timeRange分钟前的时间 Date beforeDate = new Date(now.getTime() - 1000*60*timeRange); //可以方便地修改日期格式 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowTime_10 = dateFormat.format(beforeDate); //--------------------------------------------------------------------------- // 获取昨天 // 1天的时间=24小时 x 60分钟 x 60秒 x 1000毫秒 单位是L。 Date yesterday = new Date(today.getTime() - L);//L

获取年

讯享网SimpleDateFormat formatter = new SimpleDateFormat("yyyy"); formatter.format(new Date());

 获取时间差

SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm"); String fromDate = simpleFormat.format("2016-05-01 12:00"); String toDate = simpleFormat.format("2016-05-01 12:50"); long from = simpleFormat.parse(fromDate).getTime(); long to = simpleFormat.parse(toDate).getTime(); int minutes = (int) ((to - from)/(1000 * 60)); 

判断某个日期是否在日期范围内

讯享网/ * 判断时间在时间区间内 * @param nowTime 当前时间 * @param startTime 开始时间 * @param endTime 结束时间 * @return */ public static boolean isEffectiveDate(Date dateTime, Date startTime, Date endTime) { if (dateTime.getTime() == startTime.getTime() || dateTime.getTime() == endTime.getTime()) { return true; } Calendar date = Calendar.getInstance(); date.setTime(dateTime); Calendar begin = Calendar.getInstance(); begin.setTime(startTime); Calendar end = Calendar.getInstance(); end.setTime(endTime); if (date.after(begin) && date.before(end)) { return true; } else { return false; } } //--------------------------------------------------------------------------- / * 判断当前时间在时间区间内 * @param startTime 开始时间 * @param endTime 结束时间 * @return */ public static boolean isEffectiveDate(String startTime, String endTime) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 要转换的日期格式 Date dateStart = sdf.parse(startTime); long dateStartL = dateStart.getTime(); Date dateEnd = sdf.parse(endTime); long dateEndL = dateEnd.getTime(); long nowL = new Date().getTime(); if (dateEndL > dateStartL) { if (nowL >= dateStartL && nowL < dateEndL) { return ture; } } }

获取两个时间段内的日期

/ * 获取两个日期之间的所有年 * * @param startTime * @param endTime * @return:YYYY-MM */ public static List<String> getYearBetweenDate(String startTime, String endTime){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy"); // 声明保存日期集合 List<String> list = new ArrayList<String>(); try { // 转化成日期类型 Date startDate = sdf.parse(startTime); Date endDate = sdf.parse(endTime); //用Calendar 进行日期比较判断 Calendar calendar = Calendar.getInstance(); while (startDate.getTime()<=endDate.getTime()){ // 把日期添加到集合 list.add(sdf.format(startDate)); // 设置日期 calendar.setTime(startDate); //把日期增加一天 calendar.add(Calendar.YEAR, 1); // 获取增加后的日期 startDate=calendar.getTime(); } } catch (ParseException e) { e.printStackTrace(); } return list; } / * 获取两个日期之间的所有月份 (年月) * * @param startTime * @param endTime * @return:YYYY-MM */ public static List<String> getMonthBetweenDate(String startTime, String endTime){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM"); // 声明保存日期集合 List<String> list = new ArrayList<String>(); try { // 转化成日期类型 Date startDate = sdf.parse(startTime); Date endDate = sdf.parse(endTime); //用Calendar 进行日期比较判断 Calendar calendar = Calendar.getInstance(); while (startDate.getTime()<=endDate.getTime()){ // 把日期添加到集合 list.add(sdf.format(startDate)); // 设置日期 calendar.setTime(startDate); //把日期增加一天 calendar.add(Calendar.MONTH, 1); // 获取增加后的日期 startDate=calendar.getTime(); } } catch (ParseException e) { e.printStackTrace(); } return list; } / * 获取两个日期之间的所有日期 (年月日) * * @param startTime * @param endTime * @return */ public static List<String> getBetweenDays(String startTime, String endTime){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 声明保存日期集合 List<String> list = new ArrayList<String>(); try { // 转化成日期类型 Date startDate = sdf.parse(startTime); Date endDate = sdf.parse(endTime); //用Calendar 进行日期比较判断 Calendar calendar = Calendar.getInstance(); while (startDate.getTime()<=endDate.getTime()){ // 把日期添加到集合 list.add(sdf.format(startDate)); // 设置日期 calendar.setTime(startDate); //把日期增加一天 calendar.add(Calendar.DATE, 1); // 获取增加后的日期 startDate=calendar.getTime(); } } catch (ParseException e) { e.printStackTrace(); } return list; }

时间戳

unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数

格式转换

时间戳日期格式

讯享网// 时间戳 转换时间 // 1、10位数的时间戳(秒) long time1 = ; // 注意:如果是Unix时间戳记得乘以1000 String result1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(time1 * 1000)); Date date1 = new Date(time1*1000); //对应的就是时间戳对应的Date // 2、13位数的时间戳(毫秒) double time2 = 00d; String result2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time2); //--------------------------------------------------------------------------- // 时间 转换 时间戳 String dateTime = "2022-02-22 22:22:22"; SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = simpleDateFormat.parse(dateTime ); long dateL = date.getTime(); String dateStamp = String.valueOf(dateL); 

 获取时间戳

// 有三种方式获取 // 第一、第二种:会精确到毫秒,第三种:只能精确到秒,毫秒用000替代 // 注意:获取到的时间戳除以1000就可获得Unix时间戳,就可传值给后台得到。 var time1 = date.getTime(); var time2 = date.valueOf(); var time3 = Date.parse(date);

Calendar

Calendar 类是一个抽象类,它为特定瞬间与一组诸如 YEAR、MONTH、DAY_OF_MONTH、HOUR 等日历字段之间的转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法。

构造方法

Calendar是一个抽象类,不能直接new一个实例,创建实例的方法如下:


讯享网

讯享网// 获得实例默认是当前日期 Calendar calendar = Calendar.getInstance(); 

 常用方法

方法 描述
void add(int field, int amount) 根据日历的规则,为给定的日历字段添加或减去指定的时间量。
int get(int field) 返回给定日历字段的值。
void set(int year, int month, int date) 设置日历字段 YEAR、MONTH 和 DAY_OF_MONTH 的值。
void set(int year, int month, int date, int hourOfDay, int minute) 设置日历字段 YEAR、MONTH、DAY_OF_MONTH、HOUR_OF_DAY 和 MINUTE 的值。
void set(int year, int month, int date, int hourOfDay, int minute, int second) 设置字段 YEAR、MONTH、DAY_OF_MONTH、HOUR、MINUTE 和 SECOND 的值。

常量

Calendar.AM_PM = 9;  // 0表示在中午12点之前,1表示中午12点之后(包括12点) Calendar.ERA = 0;  // 表示纪元,0表示BC(公元前),1表示AD(公元) Calendar.YEAR = 1; // 表示年份 Calendar.MONTH = 2;  // 表示月份,0表示1月,1表示2月,以此类推 Calendar.WEEK_OF_YEAR = 3;  // 本年中第几个星期 Calendar.WEEK_OF_MONTH = 4;  // 本月中第几个星期 Calendar.DAY_OF_MONTH = 5;  // 一月中第几天 Calendar.DAY_OF_YEAR = 6;  // 一年中第几天 Calendar.DAY_OF_WEEK = 7;  // 一周中第几天,从周日开始,周日是1 Calendar.DAY_OF_WEEK_IN_MONTH = 8;  // 当月中第几个星期 Calendar.HOUR = 10;  // 小时,十二小时制 Calendar.HOUR_OF_DAY = 11;  // 小时,二十四小时制 Calendar.MINUTE = 12;  // 分钟 Calendar.SECOND = 13;  // 秒 Calendar.MILLISECOND = 14;  // 毫秒 Calendar.ZONE_OFFSET = 15;  //  Calendar.DST_OFFSET = 16;  //    Calendar.JANUARY = 0;  // 一月 Calendar.FEBRUARY;  // 二月 Calendar.MARCH;  // 三月 Calendar.APRIL;  // 四月 Calendar.MAY;  // 五月 Calendar.JUNE;  // 六月 Calendar.JULY;  // 七月 Calendar.AUGUST;  // 八月 Calendar.SEPTEMBER;  // 九月 Calendar.OCTOBER;  // 十月 Calendar.NOVEMBER;  // 十一月 Calendar.DECEMBER = 11;  // 十二月   Calendar.SUNDAY = 1;  // 星期日 Calendar.MONDAY;  // 星期一 Calendar.TUESDAY;  // 星期二 Calendar.WEDNESDAY;  // 星期三 Calendar.THURSDAY;  // 星期四 Calendar.FRIDAY;  // 星期五 Calendar.SATURDAY = 7;  // 星期六

 常见用法

讯享网//获取对应日期的年份 int year = calendar.get(Calendar.YEAR); //获取对应日期的月份 //月份从0开始 int month = calendar.get(Calendar.MONTH)+1; //获取对应日期 int day = calendar.get(Calendar.DATE); //判断当前时间是上午还是下午 //0为上午,1为下午 int am_pm = calendar.get(Calendar.AM_PM); //获取对应日期的时间 (小时) //12小时制,即下午1点显示为1而不是13 int hours = calendar.get(Calendar.HOUR); //获取对应日期的时间 (分钟) int minute = calendar.get(Calendar.MINUTE); //获取对应日期是该周的第几天 int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK); //获取对应日期是该月的第几天 int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); //获取对应日期是该年的第几天 int dayOfYear = calendar.get(Calendar.DAY_OF_YEAR); //获取对应日期是该月的第几周 int weekOfMonth = calendar.get(Calendar.WEEK_OF_MONTH); //获取对应日期是该年的第几周 int weekOfYear = calendar.get(Calendar.WEEK_OF_YEAR); //获取当前月份的最大天数 calendar.getActualMaximum(Calendar.DAY_OF_MONTH);

CalendarString

//1.Calendar 转化 String Calendar calendat = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd")0; String dateStr = sdf.format(calendar.getTime()); //2.String 转化Calendar String str="2010-5-27"; SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd"); Date date =sdf.parse(str); Calendar calendar = Calendar.getInstance(); calendar.setTime(date);

获取N天、小时之后的整点时间

讯享网/ * 获取days天后整点的时间 * * @param days * @return */ public static Date getExpireOfDays(int days) { Calendar c1 = Calendar.getInstance(); c1.set(Calendar.HOUR_OF_DAY, 0); c1.set(Calendar.MINUTE, 0); c1.set(Calendar.SECOND, 0); c1.set(Calendar.MILLISECOND, 0); c1.add(Calendar.DATE, days); return c1.getTime(); } / * 获取hours小时后整点的时间 * * @param hours * @return */ public static Date getExpireOfHours(int hours) { Calendar c1 = Calendar.getInstance(); c1.set(Calendar.MINUTE, 0); c1.set(Calendar.SECOND, 0); c1.set(Calendar.MILLISECOND, 0); c1.add(Calendar.HOUR_OF_DAY, hours); return c1.getTime(); }

获取两个时间段内的所有日期

// 格式 yyyy-MM-dd public static List<String> getBetweenDate(String begin,String end){ SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); List<String> betweenList = new ArrayList<String>(); try{ Calendar startDay = Calendar.getInstance(); startDay.setTime(format.parse(begin)); startDay.add(Calendar.DATE, -1); while(true){ startDay.add(Calendar.DATE, 1); Date newDate = startDay.getTime(); String newend=format.format(newDate); betweenList.add(newend); if(end.equals(newend)){ break; } } }catch (Exception e) { e.printStackTrace(); } return betweenList; } 

时间加5分钟

讯享网Calendar nowTime = Calendar.getInstance(); nowTime.add(Calendar.MINUTE, 5); System.out.println(sdf.format(nowTime.getTime()));

两个时间相差的天数

方法1:通过Calendar类的日期比较。

只是通过日期来进行比较两个日期的相差天数的比较,没有精确到相差到一天的时间。如果是只是纯粹通过日期(年月日)来比较比较的话就是方式一。

 * date2比date1多的天数 * @param date1 * @param date2 * @return */ public static int differentDays(Date date1,Date date2) { Calendar cal1 = Calendar.getInstance(); cal1.setTime(date1); Calendar cal2 = Calendar.getInstance(); cal2.setTime(date2); int day1= cal1.get(Calendar.DAY_OF_YEAR); int day2 = cal2.get(Calendar.DAY_OF_YEAR); int year1 = cal1.get(Calendar.YEAR); int year2 = cal2.get(Calendar.YEAR); if(year1 != year2) { //同一年 int timeDistance = 0 ; for(int i = year1 ; i < year2 ; i ++) { if(i%4==0 && i%100!=0 || i%400==0) { //闰年 timeDistance += 366; } else {//不是闰年 timeDistance += 365; } } return timeDistance + (day2-day1) ; } else { //不同年 System.out.println("判断day2 - day1 : " + (day2-day1)); return day2-day1; } }

方法2:直接通过计算两个日期的毫秒数,他们的差除以一天的毫秒数,即可得到我们想要的两个日期相差的天数。

讯享网/ * 通过时间秒毫秒数判断两个时间的间隔 * @param date1 * @param date2 * @return */ public static int differentDaysByMillisecond(Date date1,Date date2){ int days = (int) ((date2.getTime() - date1.getTime()) / (1000*3600*24)); return days; }

比较日期时间大小

 // 比较 年 月 日 SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd"); //创建日期转换对象:年 月 日 String date = "2018-11-11"; //假设 设定日期是 2018-11-11 Date today = new Date(); //今天 实际日期是 2018-11-12 Debug:Wed Nov 12 12:08:12 CST 2018 try { Date dateD = sdf.parse(date); //将字符串转换为 date 类型 Debug:Sun Nov 11 00:00:00 CST 2018 boolean flag = dateD.getTime() >= today.getTime(); System.err.println("flag = "+flag); // flag = false } catch (ParseException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } 

LocalDate、LocalTime、LocalDateTime

LocalDate、LocalTime、LocalDateTime是java8对日期、时间提供的新接口。 这些类是不可变的,一旦实例化,值就固定了,有点类似于String类,所以这些类都是线程安全的。

LocalDate是针对于年月日的

创建方法

讯享网//获取当前日期 年月日(2022-05-31) LocalDate localDate = LocalDate.now(); //输入年月日设置时间 LocalDate localDate = LocalDate.of(year,month,day);

格式化

String localTime = LocalDate.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"));

 获取年月日星期

讯享网//获取年份 int year = localDate.getYear(); int year = localDate.get(ChronoField.YEAR); //获取月 //注意getMonth方法返回的是Month类 //可通过getValue方法获得一个long类型的值,然后可以强转为int类型进行使用 Month month = localDate.getMonth(); // MAY 对象 int month1 = localDate.get(ChronoField.MONTH_OF_YEAR); // 5 //获取日 int day = localDate.getDayOfMonth(); // 31 int day1 = localDate.get(ChronoField.DAY_OF_MONTH); //获取星期几 //注意getDayOfWeek方法返回的是DayOfWeek类 //可通过getValue方法获得一个long类型的值,然后可以强转为int类型进行使用 DayOfWeek dayOfWeek = localDate.getDayOfWeek(); // TUESDAY int dayOfWeek1 = localDate.get(ChronoField.DAY_OF_WEEK); // 2 

修改时间

LocalDate localDate = LocalDate.now(); //增加一年 localDate = localDate.plusYears(1); localDate = localDate.plus(1, ChronoUnit.YEARS); //减少一个月 localDate = localDate.minusMonths(1); localDate = localDate.minus(1, ChronoUnit.MONTHS); //减少一日 localDate = localDate.minusDays(1); localDate = localDate.minus(1, ChronoUnit.DAYS); //通过使用with方法进行修改 //修改年为2020 localDate = localDate.withYear(2020); //修改为2020 localDate = localDate.with(ChronoField.YEAR, 2020);

 转换

讯享网//---------------------------------------------------------- //1、String类型转换成LocalDate类型 LocalDate localDate = LocalDate.parse("2019-12-07"); //2、localDate转换成String LocalDate localDate = LocalDate.now(); //按照yyyyMMdd样式进行更改 String format = localDate.format(DateTimeFormatter.BASIC_ISO_DATE); //按照yyyy-MM-dd样式进行更改 String format = localDate.format(DateTimeFormatter.ISO_DATE); //自定义样式进行更改 DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy年MM月dd日"); String format = localDate.format(pattern); //---------------------------------------------------------- // LocalDate 转 Date LocalDate localDate = LocalDate.now(); System.out.println("local:"+localDate.getYear()); ZoneId zoneId = ZoneId.systemDefault(); Date date = Date.from(localDate.atStartOfDay().atZone(zoneId).toInstant()); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); System.out.println("date:"+calendar.get(Calendar.YEAR)); // Date 转 LocalDate Date date = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); LocalDate localDate = LocalDate.of(calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH),calendar.get(DAY_OF_MONTH));

LocalTime是针对于时分秒

创建方法

LocalTime timeNow = LocalTime.now(); // 14:35:51.207 LocalTime time = LocalTime.of(23, 59, 59); // 23:59:59 

获取时分秒

讯享网// 15:29:18 LocalTime localTime = LocalTime.now(); //获取当前时间的小时数 localTime.getHour(); //获取当前时间的分钟数 localTime.getMinute(); //获取当前时间的秒数 localTime.getSecond();

 修改时间

// 15:29:18 LocalTime localTime = LocalTime.now(); //将参数中的"小时"替换localTime中的"小时" localTime.withHour(1); //将参数中的"分钟"替换localTime中的"分钟" localTime.withMinute(1); //将参数中的"秒"替换localTime中的"秒" localTime.withSecond(1); //将当前时间减一小时 localTime.minusHours(1); //将当前时间减一分钟 localTime.minusMinutes(1); //将当前时间减一秒 localTime.minusSeconds(10); //将当前时间加一小时 localTime.plusHours(1); //将当前时间加一分钟 localTime.plusMinutes(1); //将当前时间加一秒 localTime.plusSeconds(10); //将当前时间减一小时 localTime.minusHours(1); //将当前时间减一分钟 localTime.minusMinutes(1); //将当前时间减一秒 localTime.minusSeconds(10); //将当前时间加一小时 localTime.plusHours(1); //将当前时间加一分钟 localTime.plusMinutes(1); //将当前时间加一秒 localTime.plusSeconds(10);

 比较时间

讯享网// 15:29:18 LocalTime localTime = LocalTime.now(); //比较该时间与other时间的大小,返回正数,那么当前对象时间较晚(数字较大):17 localTime.compareTo(LocalTime.of(15,29, 1))); //比较该时间是否比参数时间早(true为早):false localTime.isBefore(LocalTime.of(15,29, 1))); //比较该时间是否比参数时间晚(true为晚):true localTime.isAfter(LocalTime.of(15,29, 1))); //比较两个时间是否相等(true为早):true localTime.equals(LocalTime.now())); 

转换 

//1、String类型转换为LocalTime类型 LocalTime localTime = LocalTime.parse("17:26:00"); //2、LocalTime类型转换为String类型 //按照xx:xx:xx.xx样式进行转换 LocalTime localTime = LocalTime.now(); String format3 = localTime.format(DateTimeFormatter.ISO_TIME); //按照自定义样式进行转换 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("hh:mm:ss"); String format4 = localTime.format(formatter); 

LocalDateTime是针对于年月日时分秒

创建方法

讯享网LocalDateTime dateTimeNow = LocalDateTime.now(); LocalDateTime dateTime = LocalDateTime.of(2020, 1, 29, 23, 59, 59); // 2020-01-29T23:59:59 //获取本地当前的日期时间(不含时区) LocalDateTime now = LocalDateTime.now(); // 2019-10-17T15:44:03.640 //从指定的时钟获取当前日期时间:这里用了UTC(世界标准时间) LocalDateTime nowClock = LocalDateTime.now(Clock.systemUTC()); // 2019-10-17T07:57:42.404 //从指定时区中的系统时钟获取当前日期时间 LocalDateTime nowZoneId = LocalDateTime.now(ZoneId.systemDefault()); // 2019-10-17T16:09:04.127

修改时间

LocalDateTime localDateTime = LocalDateTime.now(); // 在该日期时间基础上增加或减少一定时间,参数1:时间量,可以是负数,参数2:时间单位 LocalDateTime plus = localDateTime.plus(1L, ChronoUnit.HOURS); // 2019-10-17T17:54:50.941 // 在该时间基础上增加一定时间 LocalDateTime plus1 = localDateTime.plus(Period.ofDays(1)); // 2019-10-18T16:54:50.941 // LocalDateTime plusDays(long days):增加指定天数 // LocalDateTime plusHours(long hours):增加指定小时数 // LocalDateTime plusMinutes(long minutes):增加指定分钟数 // LocalDateTime plusMonths(long months):增加指定月份数 // LocalDateTime plusNanos(long nanos):增加指定毫秒数 // LocalDateTime plusSeconds(long seconds):增加指定秒数 // LocalDateTime plusWeeks(long weeks):增加指定周数 // LocalDateTime plusYears(long years):增加指定年数

 两个时间时间差

讯享网LocalDateTime now = LocalDateTime.of(2021,12,21,0,0,0); LocalDateTime end = LocalDateTime.of(2022,03,21,23,59,59); //1.相差的天数 long until = now.until(end, ChronoUnit.DAYS); //2.相差的天数 Duration duration = Duration.between(now,end); long days = duration.toDays(); 

  转换 

//---------------------------------------------------------- //1、String类型转换为LocalDateTime类型 //按照12小时计算 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); //按照24小时计算 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); LocalDate localDate = LocalDate.parse("2019-12-07 07:43:53",formatter); //2、LocalDateTime类型转换为String类型 LocalDateTime localDateTime = LocalDateTime.now(); DateTimeFormatter formatter2 = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss"); String format5 = localDateTime.format(formatter2); //---------------------------------------------------------- // LocalDateTime 转 Date LocalDateTime localDateTime = LocalDateTime.now(); System.out.println("local:"+localDateTime.getYear()); ZoneId zoneId = ZoneId.systemDefault(); Date date = Date.from(localDateTime.atZone(zoneId).toInstant()); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); System.out.println("date:"+calendar.get(Calendar.YEAR)); // Date 转 LocalDateTime Date date = new Date(); LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(),ZoneId.systemDefault());

java8 对时间操作的类还有很多,在java.time包下去看看
Instant:时间戳
Duration:持续时间,时间差
LocalDate:只包含日期,比如:2016-10-20
LocalTime:只包含时间,比如:23:12:10
LocalDateTime:包含日期和时间,比如:2016-10-20 23:14:21
Period:时间段
ZoneOffset:时区偏移量,比如:+8:00
ZonedDateTime:带时区的时间
Clock:时钟,比如获取目前美国纽约的时间

LocalDateTime、LocalDate、Date的相互转换

LocalDateTime 转 LocalDate

讯享网LocalDateTime localDateTime = LocalDateTime.now(); LocalDate localDate = localDateTime.toLocalDate();

LocalDate 转 LocalDateTime

LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime1 = localDate.atStartOfDay(); LocalDateTime localDateTime2 = localDate.atTime(8,20,33); LocalDateTime localDateTime3 = localDate.atTime(LocalTime.now());

LocalDateTime、LocalDate 转 Date

讯享网LocalDateTime localDateTime = LocalDateTime.now(); LocalDate localDate = LocalDate.now(); //获取系统默认时区 ZoneId zoneId = ZoneId.systemDefault(); //时区的日期和时间 ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId); ZonedDateTime zonedDateTime1 = localDate.atStartOfDay().atZone(zoneId); //获取时刻 Date date = Date.from(zonedDateTime.toInstant()); Date date = Date.from(zonedDateTime1.toInstant());

Date 转 LocalDateTime、LocalDate

Date date = new Date(); ZoneId zoneId = ZoneId.systemDefault(); LocalDateTime localDateTime = date.toInstant().atZone(zoneId).toLocalDateTime(); LocalDate localDate = date.toInstant().atZone(zoneId).toLocalDate();

小讯
上一篇 2025-04-06 09:58
下一篇 2025-03-05 07:49

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/17971.html