软件编程
位置:首页>> 软件编程>> java编程>> Java中常用时间的一些相关方法

Java中常用时间的一些相关方法

作者:影子930  发布时间:2022-02-06 11:33:38 

标签:java,时间,处理

前言

在我们java开发中,Date日期这个字段会被经常使用,比如获取当前系统的时间,获取上个月,上一年的时间,以及获取两个日期相差的时分秒数,或者对日期类型进行格式化,等等,等等,下面将给大家详细介绍下Java中常用时间的一些相关方法

一、获取当前时间的方式


public static void main(String[] args) {
   //Date
   Date now = new Date();
   System.out.println(now);

//java8的时间
   LocalDateTime localDateTime = LocalDateTime.now();
   System.out.println(localDateTime);

Calendar calendar = Calendar.getInstance();
   Date time = calendar.getTime();
   System.out.println(time);
   System.out.println("年" + calendar.get(Calendar.YEAR));
   System.out.println("月" + (calendar.get(Calendar.MONTH) + 1));

//joda time
   DateTime dateTime = DateTime.now();
   System.out.println(dateTime);
}

获取当前时间可以使用Date LocalDatetime Calendar  Datetime

二、获取当月第n天


public static void main(String[] args) {
   //建议使用Calendar  可以设置年月日时分秒
   Calendar calendar = Calendar.getInstance();
   ////当月16
   calendar.set(Calendar.DAY_OF_MONTH, 16);
   System.out.println(calendar.getTime());

//当月16
   DateTime now = DateTime.now();
   DateTime dateTime = now.withDayOfMonth(16);
   System.out.println(dateTime);

//当月14
   LocalDateTime localDateTime = LocalDateTime.now();
   System.out.println(localDateTime.withDayOfMonth(14));

//1月11
   System.out.println(localDateTime.withMonth(1).withDayOfMonth(11));
}

三、格式化为字符串


```
//使用SimpleDateFormat
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(format.format(new Date()));

//使用Calendar
Calendar calendar = Calendar.getInstance();
System.out.println(String.format("%s年%s月%s日%s时%s分%s秒", calendar.get(Calendar.YEAR),
       calendar.get(Calendar.MONTH) + 1, calendar.get(Calendar.DAY_OF_MONTH),
       calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND)));

LocalDateTime now = LocalDateTime.now();
String str = now.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println(str);
```

四、加减时间(单位可以是秒,小时等)


public static void main(String[] args) {
   Date now = new Date();
   //加一小时
   long time = now.getTime() + (60 * 60 * 1000);
   System.out.println(new Date(time));

/*
   <dependency>
       <groupId>cn.hutool</groupId>
       <artifactId>hutool-all</artifactId>
       <version>5.7.14</version>
   </dependency>
    */
   //引入Hutool 加一小时
   System.out.println(DateUtil.offset(now, DateField.HOUR, 1));
   //减一小时
   System.out.println(DateUtil.offset(now, DateField.HOUR, -1));

LocalDateTime localDateTime = LocalDateTime.now();
   System.out.println("加一小时" + localDateTime.plusHours(1));
   System.out.println("减一小时" + localDateTime.minusHours(1));

DateTime dateTime = DateTime.now();
   System.out.println(dateTime.plusHours(1));
   System.out.println(dateTime.minusHours(1));
}

LocalDateTime和DateTime都自带增加和减少时间的方法

五、通过出生日期获取年龄


public static void main(String[] args) {
   //时间1990-12-05
   DateTime birthDay = DateTime.now().withYear(1990).withMonthOfYear(10).withDayOfMonth(23);
   System.out.println(birthDay);
   //获取相差得年 会进行月份和日期比较 如
   Years years = Years.yearsBetween(birthDay, new DateTime());
   System.out.println(years);
   System.out.println(years.getYears());
}

还可以使用年份相减,再比较月,日的方法得到生日

六、判断两个时间段是否覆盖


public static void main(String[] args) {
   DateTime now = DateTime.now();

DateTime start1 = now;
   DateTime end1 = now.plusMinutes(1);

DateTime start2 = now.plusSeconds(50);
   DateTime end2 = now.plusMinutes(2);

Interval interval1 = new Interval(start1, end1);
   Interval interval2 = new Interval(start2, end2);

System.out.println(interval1.overlaps(interval2));
   System.out.println(start1.getMillis() < end2.getMillis() && start2.getMillis() < end1.getMillis());
}

七、求两个时间间隔


public static void main(String[] args) {
   DateTime now = DateTime.now();
   //开始时间
   Date startTime = now.toDate();
   //结束时间
   Date endTime = now.plusHours(1).toDate();
   //1小时
   System.out.println("开始时间与结束时间的时间间隔:" + DateUtil.between(startTime, endTime, DateUnit.SECOND));

long time = (endTime.getTime() - startTime.getTime()) / 1000;
   System.out.println(time);
}

八、UTC时间与北京时间转换


public static void main(String[] args) throws ParseException {
   Date now = new Date();
   Date utcDate = bj2UTC(now);
   //utc时间
   System.out.println(utcDate);
   //北京时间
   System.out.println(utc2BJ(utcDate));

DateTime dateTime = DateTime.now().withDayOfMonth(1).withHourOfDay(0).withMinuteOfHour(0).withSecondOfMinute(0);
   System.out.println(dateTime);
   System.out.println(bj2UTC(dateTime.toDate()));
}

public static Date bj2UTC(Date date) {
   if (date == null) {
       return null;
   }
   LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.of("-8"));
   return Date.from(localDateTime.atOffset(ZoneOffset.UTC).toInstant());
}

public static Date utc2BJ(Date date) {
   if (date == null) {
       return null;
   }
   LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.of("+8"));
   return Date.from(localDateTime.atOffset(ZoneOffset.UTC).toInstant());
}

北京时间=UTC+8

来源:https://juejin.cn/post/7022923059992461320

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com