【JAVA】日期工具类

MySQL中datetime类型23:59:59自动变为下一天的00:00:00

如:2024-08-11 23:59:59 变成了 2024-08-12 00:00:00。
解析:数据库入库的时候会有500毫秒的进位,然而程序在赋值时间给变量的时候很大概率会超过500ms,有时是999ms。

解决方案

// DateUtil Hutool官网   将生成的时间往前偏移999毫秒即可。
DateUtil.endOfDay(DateUtil.date()).offset(DateField.MILLISECOND,-999);

2021-02-10T05:49:10.942283Z 的格式转换字符串转date

 DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
 Date timeDate =  format.parse(monitorDataVo.getTime());   //monitorDataVo.getTime()字符串

public class DateUtil {

private static final Logger log = LogManager.getLogger();

/**
 * 秒
 */
public static final long SECOND_MILLI = 1000;

/**
 * 分
 */
public static final long MINUTE_MILLI = 60 * 1000;

/**
 * 时
 */
public static final long HOUR_MILLI = 60 * 60 * 1000;

/**
 * 天
 */
public static final long DAY_MILLI = 24 * 60 * 60 * 1000;

/**
 * 东八区
 */
private static final String ZONE_8 = "+8";

/**
 * 获取当前时间
 * @return  当前时间
 */
public static LocalDateTime localDateTime(){
    return LocalDateTime.now();
}

/**
 * 当前时间 date 类型
 * @return date类型
 */
public static Date date(){
    return new Date();
}

public static Date localDateTime2Date(LocalDateTime localDateTime){
    return Date.from(localDateTime
            .atZone(ZoneId.systemDefault())
            .toInstant());
}

public static LocalDateTime date2LocalDateTime(Date date){
    return date.toInstant()
            .atZone(ZoneId.systemDefault())
            .toLocalDateTime();
}


/**
 * 获取当前时间戳
 * @return  时间戳
 */
public static long timeStamp(){
    return Instant.now().getEpochSecond();
}


/**
 * 获取相应时间的时间戳
 * @param localDateTime 时间
 * @return  毫秒级时间戳
 */
public static long timeStamp(LocalDateTime localDateTime){
    return localDateTime.toInstant(ZoneOffset.of(ZONE_8)).toEpochMilli();
}

/**
 * 将String转化成date
 *
 * @throws ParseException
 * */
public static Date stringToDate(String str, String sfgs)
        throws ParseException {
    SimpleDateFormat sf = new SimpleDateFormat(sfgs);
    return sf.parse(str);
}


/**
 * datetime -> String
 * @return
 */
public static String getDateTimeStr(Date date){
    String dateStr = "";
    if(date != null){
        Format format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        dateStr = format.format(date);
    }
    return dateStr;
}

/**
 * 取得两个日期的间隔天数
 * @param one
 * @param two
 * @return
 */
public static int getDiffDays(Date one, Date two) {
    long from = one.getTime();
    long to = two.getTime();

    //一天等于多少毫秒:24*3600*1000

    int day = (int)((to-from)/(24*60*60*1000));
    return day;
}


/**
 * 取得新的日期
 *
 * @param date1
 *            日期
 * @param days
 *            天数
 *
 * @return 新的日期
 */
public static Date addDays(Date date1, long days) {
    Calendar cal = Calendar.getInstance();
    cal.setTime(date1);
    cal.add(Calendar.DATE, (int) days);
    return cal.getTime();
}

/**
 * 比较时间大小
 * @param date1
 * @param date2
 * @return
 */
public static boolean compareDate(Date date1, Date date2){
    if (date1.getTime() > date2.getTime()) {
        return true;
    }
    return false;
}

/**
*获取选择时间前几天时间
*  @param days
*/
public static Date getDaysBefore(int days, Date date) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(Calendar.DATE, days);
    return calendar.getTime();
}



public static void main(String[] args) {
    System.out.println(monthBeforeStringDate("2018-08-01",-2));
   // System.out.println(getDiffDays(getDaysBefore(-1,new Date()),new Date()));
}

/**
 * 字符串转换成日期
 * @param str
 * @return date
 */
public static Date strToDate(String str) {
    if(StringUtils.isEmpty(str)){
        return null;
    }
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date date = null;
    try {
        date = format.parse(str);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return date;
}

/**
 * 获取前三个月日期
 * @return
 */
public static String monthBeforeDate(int month) {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.MONTH, month);    //得到前3个月
    System.out.print(format.format(calendar.getTime()));
    return format.format(calendar.getTime());
}

/**
 * 根据指定日期往前获取前几个月
 * @param month
 * @return
 */
public static String monthBeforeStringDate(String date,int month) {
    SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
    Date dateNew = null;
    try {
        dateNew = format.parse(date);
    } catch (ParseException e) {
        e.printStackTrace();
    }
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(dateNew);
    calendar.add(Calendar.MONTH, month);    //得到前3个月
    System.out.print(format.format(calendar.getTime()));
    return format.format(calendar.getTime());
}



public static String replaceDateRule(String source){
    return source.replace("-","").substring(0,6);

}



 // 获取指定年月的第一天
public static String getFirstDayOfMonth1(int year, int month) {
    Calendar calendar = Calendar.getInstance();
    //设置年份
    calendar.set(Calendar.YEAR, year);
    //设置月份
    calendar.set(Calendar.MONTH, month-1);
    //获取某月最小天数
    int firstDay = calendar.getMinimum(Calendar.DATE);
    //设置日历中月份的最小天数
    calendar.set(Calendar.DAY_OF_MONTH,firstDay);
    //格式化日期
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    return sdf.format(calendar.getTime());
}

/**
 * 获取指定年月的最后一天
 * @param year 年
 * @param month 月
 * @return
 */
public static String getLastDayOfMonth1(int year, int month) {
    Calendar calendar = Calendar.getInstance();
    //设置年份
    calendar.set(Calendar.YEAR, year);
    //设置月份
    calendar.set(Calendar.MONTH, month-1);
    //获取某月最大天数
    int lastDay = calendar.getActualMaximum(Calendar.DATE);
    //设置日历中月份的最大天数
    calendar.set(Calendar.DAY_OF_MONTH, lastDay);
    //格式化日期
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    return sdf.format(calendar.getTime());
}

//返回两个日期相差的小时数
public static long dateDiff(String startTime, String endTime, String format) throws Exception {
    //按照传入的格式生成一个simpledateformate对象
    SimpleDateFormat sd = new SimpleDateFormat(format);
    //一天的毫秒数
    long nd = 1000*24*60*60;
    //一小时的毫秒数
    long nh = 1000*60*60;
    //一分钟的毫秒数
    long nm = 1000*60;
    //一秒钟的毫秒数
    long ns = 1000;
    long diff;
    //获得两个时间的毫秒时间差异
    diff = sd.parse(endTime).getTime() - sd.parse(startTime).getTime();
    //计算差多少天
    long day = diff/nd;
    //计算差多少小时
    long hour = diff%nd/nh;
    //计算差多少分钟
    long min = diff%nd%nh/nm;
    //计算差多少秒//输出结果
    long sec = diff%nd%nh%nm/ns;
    //System.out.println("时间相差:"+day+"天"+hour+"小时"+min+"分钟"+sec+"秒。");
    long sumHour = day * 24 + hour;
    return sumHour ;
}

/**
 *获取选择时间前几天时间
 * 【正数+1天,负数-1天】
 *  @param days
 */
public static Date getDaysBefore(int days, Date date) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(Calendar.DATE, days);
    return calendar.getTime();
}

/**
 *获取选择时间后加月份
 * 【正数+1月,负数-1月】
 *  @param mouth
 */
public static Date getMouthAfter(int mouth, Date date) {
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(date);
    calendar.add(Calendar.MONTH, mouth);
    return calendar.getTime();
}

常用工具类2

1.计算给定时间至今的天数:long date2day(String date)

2.得到当前年:int getYear()    

3.得到当前月:  int getMonth() 
    
4.得到当前日:int getDay()

5.返回当前月(01~12):String getMonth2()   

6.返回当前日(01~31): String getDay2()

7.返回指定格式的当前时间: 
 String getDate(String format)[YYYY-MM-DD,YY-MM,YY年MM月,YY/YYYY]
 
8.计算某天是星期几: whatDayIsSpecifyDate(String)

9.计算两日期间相差天数:
 signDaysBetweenTowDate(String nowDate, String beforeDate)
 
10.获得当前时间(年月日 时分秒):getCurrentDateTime

11.根据日期获取星座: 
String date2Constellation(String strDate)       YYYY-MM-DD 

12.根据日期获取生肖 :
 String date2Zodica(String strDate)             YYYY-MM-DD
 
13.根据日期获取年龄: 
int getAge(String strbirthDay)                  YYYY-MM-DD 

Java 时间转换常用方法【localdate、localdatetime、date】

1.获得某天最大时间 2017-10-15 23:59:59
2. 获得某天最小时间 2017-10-15 00:00:00
3. 时间戳转Date
4. Date转时间戳
5. 格式化Date
6. 给日期加上指定时长
7. 得到指定时间节点的日期时间
8. 判断两个时间点是否为同一天、同一年
9. Java 8 日期时间 API

  // 1获得某天最大时间 2017-10-15 23:59:59
public static Date getEndOfDay(Date date) {
	LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()),       ZoneId.systemDefault());;
	LocalDateTime endOfDay = localDateTime.with(LocalTime.MAX);
	return Date.from(endOfDay.atZone(ZoneId.systemDefault()).toInstant());
}
// 2获得某天最小时间 2017-10-15 00:00:00
public static Date getStartOfDay(Date date) {
	LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(date.getTime()), ZoneId.systemDefault());
	LocalDateTime startOfDay = localDateTime.with(LocalTime.MIN);
	return Date.from(startOfDay.atZone(ZoneId.systemDefault()).toInstant());
} 

**测试代码**
  public static void main(String[] args) {
	Date date = new Date();
	System.out.println("今天开始时间:" + getStartOfDay(date));
	System.out.println("今天结束时间:" + getEndOfDay(date));
	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
	System.out.println(sdf.format(getStartOfDay(date)));
	System.out.println(sdf.format(getEndOfDay(date)));
}
*运行结果*
结果输出如下:

在这里插入图片描述

声明式时间格式化

private static String Date_Format_Patten = “yyyy-MM-dd HH:mm:ss”;
DateUtil.stringToDate(interviewTime,Date_Format_Patten)

时间戳转Date

注:以下的方法中很多常量和方法我都没有提取出来,正式项目中还是建议大家封装在时间处理类中,规范化操作

public static void main(String[] args) {
    // 10位的秒级别的时间戳
    long time1 = 1527767665;
    String result1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(time1 * 1000));
    System.out.println("10位数的时间戳(秒)--->Date:" + result1);
    Date date1 = new Date(time1*1000);   //对应的就是时间戳对应的Date
    // 13位的秒级别的时间戳
    double time2 = 1515730332000d;
    String result2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(time2);
    System.out.println("13位数的时间戳(毫秒)--->Date:" + result2);
}

执行结果

10位数的时间戳(秒)--->Date:2018-05-31 19:54:25
13位数的时间戳(毫秒)--->Date:2018-01-12 12:12:12

尤其要注意上面10位的秒级别的时间戳时,不能用int来定义time1变量,否则会得到错误的结果:

public static void main(String[] args) {
    // 10位的秒级别的时间戳   
    int time1 = 1527767665;   //错误做法
    String result1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date(time1 * 1000));
    System.out.println("10位数的时间戳(秒)--->Date:" + result1);
}

执行出的错误结果

10位数的时间戳(秒)--->Date:1969-12-17 23:21:47

4、Date转时间戳

public static void main(String[] args) {
    //获取指定时间的时间戳,除以1000说明得到的是秒级别的时间戳(10位)
    long time = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).parse("2018-06-30 20:00:00", new ParsePosition(0)).getTime() / 1000;
 
    //获取时间戳
    long now1 = System.currentTimeMillis();
    long now2 = new Date().getTime();
 
    System.out.println("获取指定时间的时间戳:" + time);
    System.out.println("当前时间戳:" +now1);
    System.out.println("当前时间戳:" +now2);
}

执行结果

获取指定时间的时间戳:1530360000
当前时间戳:1527769494340
当前时间戳:1527769494340

5、格式化Date

public static void main(String[] args) {
    //使用common-lang包下面的DateFormatUtils类
    String format1 = DateFormatUtils.format(new Date(), "yyyy-MM-dd HH:mm:ss");
    //使用最原始的SimpleDateFormat类
    String format2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
 
    System.out.println("格式化时间1:" + format1);
    System.out.println("格式化时间2:" + format2);
}

执行结果

格式化时间1:2018-05-31 20:26:49
格式化时间2:2018-05-31 20:26:49

DateFormatUtils是commons.lang3.time.DateFormatUtils下的,如果你的项目中没有,maven中引入下:

<dependency>
   <groupId>org.apache.commons</groupId>
   <artifactId>commons-lang3</artifactId>
   <version>3.6</version>
</dependency>

6、给日期加上指定时长
比如,给现在的时间加上12个小时,这个需求也很常见,例如我做过的某个秒杀接口要返回剩余秒杀时间给前端,那么我就直接计算(比如秒杀持续时间为12小时):秒杀(倒计时)截止时间=(当前时间+12H)即可。

public static void main(String[] args) {
    //将指定日期加上固定时间,DateUtils还有其它添加分钟、小时、月份之类的方法api
    //使用到的是commons-lang包下面的DateUitls类
    Date date = DateUtils.addDays(new Date(), 10);   //
    System.out.println("当前时间为:"+DateFormatUtils.format(new Date(),"yyyy-MM-dd HH:mm:ss"));
    String format = DateFormatUtils.format(date, "yyyy-MM-dd HH:mm:ss");
    System.out.println("当前时间加上10天后:" + format);
}

执行结果

当前时间为:2018-05-31 20:31:53
当前时间加上10天后:2018-06-10 20:31:53

DateUtils也是commons.lang3.time包下的,别忘了加maven依赖。
7、得到指定时间节点的日期时间

public static void main(String[] args) throws ParseException {
        //得到指定日期
        String date = "2018-03-03 15:20:12";
        Date parse = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(date);
        System.out.println(parse);
    }

8、判断两个时间点是否为同一天、同一年
给定两个日期,快速判断两者是否为同一天或者同一年,比如我做过的一个接口需求是:每人每天有一次抽奖机会,那么当用户当天第二次发送请求时候,我就得判断查询参与记录,并且判断最新一次参与时间和当天是否为同一天。

/**
     * 判断是否为同一天:使用commons-lang包下的DateUtils类
     *
     * @param day1
     * @param day2
     * @return
     */
    public boolean isSameDay(Date day1, Date day2) {
        return DateUtils.isSameDay(day1, day2);
    }
 
    /**
     * 判断是否为同一天:使用joda依赖包里的时间类,效率从一定程度上优于DateUtils.isSameDay()方法
     *
     * @param date1
     * @param date2
     * @return
     */
    public static boolean isSameDay1(Date date1,Date date2){
        if(date1==null || date2==null){
            throw new IllegalArgumentException("date must be not null");
        }
        LocalDate localDate1 = new LocalDate(new DateTime(date1.getTime()));
        LocalDate localDate2 = new LocalDate(new DateTime(date2.getTime()));
        return localDate1.equals(localDate2);
    }

9、Java 8 日期时间 API
Java 8 在 java.time 包下提供了很多新的 API。以下为两个比较重要的 API:
Local(本地) − 简化了日期时间的处理,没有时区的问题。
Zoned(时区) − 通过制定的时区处理日期时间。
本地化日期时间 API
LocalDate/LocalTime 和 LocalDateTime 类可以在处理时区不是必须的情况。代码如下:

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.LocalDateTime;
import java.time.Month;
 
public class Java8Tester {
   public static void main(String args[]){
      Java8Tester java8tester = new Java8Tester();
      java8tester.testLocalDateTime();
   }
    
   public void testLocalDateTime(){
    
      // 获取当前的日期时间
      LocalDateTime currentTime = LocalDateTime.now();
      System.out.println("当前时间: " + currentTime);
        
      LocalDate date1 = currentTime.toLocalDate();
      System.out.println("date1: " + date1);
        
      Month month = currentTime.getMonth();
      int day = currentTime.getDayOfMonth();
      int seconds = currentTime.getSecond();
        
      System.out.println("月: " + month +", 日: " + day +", 秒: " + seconds);
        
      LocalDateTime date2 = currentTime.withDayOfMonth(10).withYear(2012);
      System.out.println("date2: " + date2);
        
      // 12 december 2014
      LocalDate date3 = LocalDate.of(2014, Month.DECEMBER, 12);
      System.out.println("date3: " + date3);
        
      // 22 小时 15 分钟
      LocalTime date4 = LocalTime.of(22, 15);
      System.out.println("date4: " + date4);
        
      // 解析字符串
      LocalTime date5 = LocalTime.parse("20:15:30");
      System.out.println("date5: " + date5);
       //获取当前年
      Calendar calendar = Calendar.getInstance();
      int yearNow = calendar.get(Calendar.YEAR); 
      System.out.println("date6: " + yearNow );
   }
}

执行以上脚本,输出结果为:

$ javac Java8Tester.java 
$ java Java8Tester
当前时间: 2016-04-15T16:55:48.668
date1: 2016-04-15: APRIL,: 15,: 48
date2: 2012-04-10T16:55:48.668
date3: 2014-12-12
date4: 22:15
date5: 20:15:30
date6:2018

使用时区的日期时间API
如果我们需要考虑到时区,就可以使用时区的日期时间API:

import java.time.ZonedDateTime;
import java.time.ZoneId;
 
public class Java8Tester {
   public static void main(String args[]){
      Java8Tester java8tester = new Java8Tester();
      java8tester.testZonedDateTime();
   }
    
   public void testZonedDateTime(){
    
      // 获取当前时间日期
      ZonedDateTime date1 = ZonedDateTime.parse("2015-12-03T10:15:30+05:30[Asia/Shanghai]");
      System.out.println("date1: " + date1);
        
      ZoneId id = ZoneId.of("Europe/Paris");
      System.out.println("ZoneId: " + id);
        
      ZoneId currentZone = ZoneId.systemDefault();
      System.out.println("当期时区: " + currentZone);
   }
}

执行以上脚本,输出结果为:

$ javac Java8Tester.java 
$ java Java8Tester
date1: 2015-12-03T10:15:30+08:00[Asia/Shanghai]
ZoneId: Europe/Paris
当期时区: Asia/Shanghai

LocalDateTime、LocalDate、Date的相互转换
LocalDateTime 转 LocalDate ——直接调用 toLocalDate() 方法

LocalDateTime localDateTime = LocalDateTime.now();
LocalDate localDate = localDateTime.toLocalDate();

LocalDateTime 转 Date

LocalDateTimeDate 时,需要使用到 Java 8的几个类
ZoneId/ZoneOffset:表示时区
ZonedDateTime: 表示特定时区的日期和时间
Instant:表示时刻,不直接对应年月日信息,需要通过时区转换
LocalDateTime localDateTime = LocalDateTime.now();
//获取系统默认时区
ZoneId zoneId = ZoneId.systemDefault();
//时区的日期和时间
ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);
//获取时刻
Date date = Date.from(zonedDateTime.toInstant());
System.out.println("格式化前:localDateTime:" + localDateTime + "  Date:" + date);
//格式化LocalDateTime、Date
DateTimeFormatter localDateTimeFormat = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("格式化后:localDateTime:" + localDateTimeFormat.format(localDateTime) + "  Date:" + dateFormat.format(date));

输出结果如下:

格式化前:localDateTime:2020-10-27T11:35:09.969  Date:Tue Oct 27 11:35:09 CST 2020
格式化后:localDateTime:2020-10-27 11:35:09  Date:2020-10-27 11:35:09

LocalDate 转 LocalDateTime ——一般调用 atTime() 方法进行赋值

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

LocalDate 转 Date ——先调用 atStartOfDay() 方法转 LocalDateTime 再转 Date

LocalDate localDate = LocalDate.now();
ZoneId zoneId = ZoneId.systemDefault();
Date date = Date.from(localDate.atStartOfDay().atZone(zoneId).toInstant());

Date 转 LocalDateTime ——先转 ZonedDateTime 再转 LocalDateTime

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

Date 转 LocalDate——跟 LocalDate 同理

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

Java8 localdatetime 常用范例

		LocalDateTime localDateTime = LocalDateTime.now();
        System.out.println("当前时间:" + localDateTime);//2020-12-08T11:19:04.305
 
        LocalDateTime localDateTime1 = LocalDateTime.of(2020, 06, 02, 12, 22, 23);
        System.out.println("指定时间:" + localDateTime1);//2020-06-02T12:22:23
 
        //手动指定时间 当天0点 方法一(缺点:毫秒未归0)
        LocalDateTime localDateTime11 = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0);
        System.out.println("手动指定日期时间当天0点:" + localDateTime11);//2020-12-08T00:00:00.306
       //手动指定时间 当天0点 方法二
        LocalDateTime today_start = LocalDateTime.of(LocalDate.now(),LocalTime.MIN);
        System.out.println("手动指定日期时间当天0点:" + today_start );//2020-12-08T00:00
        //指定当前周一
        LocalDateTime monday= LocalDateTime.now().with(DayOfWeek.MONDAY);
        LocalDateTime localDateTime2 = LocalDateTime.now().plusMonths(2);
        System.out.println("当前时间添加2月:" + localDateTime2);//2021-02-08T11:19:04.306
        LocalDateTime localDateTime3 = LocalDateTime.now().minusDays(2);
        System.out.println("当前时间减少2天:" + localDateTime3);//2020-12-06T11:19:04.306
        // 获取秒数
        Long second = LocalDateTime.now().toEpochSecond(ZoneOffset.of("+8"));
        System.out.println("获取秒数" + second);//1607397544
        // 获取毫秒数方法1
        Long milliSecond = LocalDateTime.now().toInstant(ZoneOffset.of("+8")).toEpochMilli();
        System.out.println("获取毫秒数1:" + milliSecond);//1607397544306
        // 或者
        ZoneOffset zoneOffset = endTime.atZone(ZoneOffset.systemDefault()).getOffset();
        Long milliSecond1 = LocalDateTime.now().toInstant(zoneOffset).toEpochMilli();
        System.out.println("获取毫秒数1:" + milliSecond1);//1607397544306
 
        //获取毫秒数方法2
        long milliSecond2 = Instant.now().toEpochMilli();
        System.out.println("获取毫秒数2:" + milliSecond2);//1607397544307
        //long转LocalDateTime
        LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(milliSecond2), ZoneOffset.of("+8"));//2021-01-05T23:59:59.999
		LocalDateTime localDateTime21 = LocalDateTime.now().withDayOfMonth(10);
        System.out.println("手动指定日期时间:" + localDateTime21);//2020-12-10T11:19:04.307
        LocalDateTime with = LocalDateTime.now().with(TemporalAdjusters.firstDayOfMonth());
        System.out.println("使用TemporalAdjuster获取当月第一天:" + with);//2020-12-01T11:19:04.307
        System.out.println("获取下一年的第一天:" + localDateTime.with(TemporalAdjusters.firstDayOfNextYear()));//2021-01-01T11:19:04.305
        System.out.println("获取年中最后一天" + localDateTime.with(TemporalAdjusters.lastDayOfYear()));//2020-12-31T11:19:04.305
 
        System.out.println("获取月中第一天" +localDateTime.with(TemporalAdjusters.firstDayOfMonth()));
        System.out.println("获取月中最后一天" + localDateTime.with(TemporalAdjusters.lastDayOfMonth()));//2020-12-31T11:19:04.305
        System.out.println("获取下个星期一" + localDateTime.with(TemporalAdjusters.next(DayOfWeek.MONDAY)));//2020-12-14T11:19:04.305
        // 也可自定义格式
        DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
        // 两种写法效果一样
        System.out.println("自定义格式化日期一:"+formatter1.format(LocalDateTime.now()));//2020-12-08 11:19:04
        System.out.println("自定义格式化日期二:"+LocalDateTime.now().format(formatter1));//2020-12-08 11:19:04
        // 字符串转换时间
        LocalDateTime parse = LocalDateTime.parse("2020-12-08 11:18:00", formatter1);
        System.out.println("字符串转日期:"+parse);//2020-12-08T11:18
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值