欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java获取时间戳精确到毫秒(java获取时间戳精确到微秒讲解)

程序员文章站 2023-11-20 21:18:46
当前时间加上时间戳关于日期的计算,很多朋友们都喜欢用时间戳来直接相加,比如希望得到当前时间之后30天的时间,会这么写代码: 直接把 new data().gettime() 方法得到的时间戳加上30天...

当前时间加上时间戳

关于日期的计算,很多朋友们都喜欢用时间戳来直接相加,比如希望得到当前时间之后30天的时间,会这么写代码: 直接把 new data().gettime() 方法得到的时间戳加上30天对应的毫秒数,也就是30天 * 24小时 * 3600秒 * 1000毫秒

        date today = new date();
        date nextmonth = new date(today.gettime()+30*24*3600*1000);
        system.out.println(today);
        system.out.println(nextmonth);

得到的结果可能会让我失败:

sat jul 10 07:41:30 cst 2021
sun jun 20 14:38:43 cst 2021

得到的日期竟然比当前的日期还好早,你说怎么回事呢?
原因是:
因为 int 发生了溢出

怎样修改呢?我们只要把 30改成30l即可,让其成为long

        date today = new date();
        date nextmonth = new date(today.gettime()+30l*24*3600*1000);
        system.out.println(today);
        system.out.println(nextmonth);

结果:

sat jul 10 07:44:38 cst 2021
mon aug 09 07:44:38 cst 2021

使用calendar

java8之前,我们一般使用calendar类来实现

        calendar c = calendar.getinstance();
        c.settime(new date());
        system.out.println(c.gettime());
        c.add(calendar.day_of_month,30);
        system.out.println(c.gettime());

结果:

sat jul 10 07:47:25 cst 2021
mon aug 09 07:47:25 cst 2021

java 8 日期时间

使用 java 8 的日期时间类型,可以直接进行各种计算,更加简洁和方便:

 localdatetime localdatetime = localdatetime.now();
 system.out.println(localdatetime.plusdays(30));

下面介绍localdatetime的基本用法:

1) 获取一年、月、日

  private localdatetime localdatetime = null;
    @before
    public void init(){
        localdatetime = localdatetime.now();
    }
    @test
    public void test1(){
        system.out.println("year:"+localdatetime.getyear());
        system.out.println("month:"+localdatetime.getmonth().getvalue());
        system.out.println("day of month:"+localdatetime.getdayofmonth());
        system.out.println("day of week:"+ localdatetime.getdayofweek());
        system.out.println("day of year:"+localdatetime.getdayofyear());
    }

结果:

year:2021
month:7
day of month:10
day of week:saturday
day of year:191  
  1. 获取小时、分钟、秒
 system.out.println("hour:"+localdatetime.gethour());
 system.out.println("minute :"+localdatetime.getminute());
 system.out.println("second:"+localdatetime.getsecond());
 system.out.println("nano:"+localdatetime.getnano());

结果:

hour:8
minute :17
second:32
nano:50000000
  1. 对日期做加减

可以使用各种 minus 和 plus 方法直接对日期进行加减操作,比如如下代码实现了减一天和加一天,以及减一个月和加一个月

        system.out.println("minus days:"+ localdatetime.minusdays(1));
        system.out.println("minus months:"+localdatetime.minusmonths(1));
        system.out.println("minus year: "+localdatetime.minusyears(1));
        system.out.println("minus hours:"+localdatetime.minushours(1));
        system.out.println("minus seconds:"+localdatetime.minusseconds(1));
  1. 时间的比较

localdatetime 类提供以下api比较localdatetime 对象在java中。

  • boolean isafter(chronolocaldatetime other):检查此日期时间是否在指定日期时间之后。
  • boolean isbefore(chronolocaldatetime other)
  • boolean isequal(chronolocaldatetime other)
  • int compareto(chronolocaldatetime other) 将此日期时间与其他日期时间进行比较。
 localdatetime datetime1 = localdatetime.of(2021,5,7,9,22,22);
      localdatetime datetime2 = localdatetime.of(2021,6,7,9,22,22);
      localdatetime datetime3 = localdatetime.of(2021,5,7,9,22,22);

      if(datetime1.isbefore(datetime2)){
          system.out.println("datetime1 is  before datetime2");
      }

        if(datetime2.isafter(datetime3)){
            system.out.println("datetime2 is  after datetime3");
        }

        if(datetime1.equals(datetime3)){
            system.out.println("datetime1 is equal to datetime3");
        }

        if(datetime1.compareto(datetime3) ==0){
            system.out.println("datetime1 is equal to datetime3");
        }
  1. 通过 with 方法进行快捷时间调节
  • 使用 temporaladjusters.firstdayofmonth 得到当前月的第一天;
  • 使用 temporaladjusters.firstdayofyear() 得到当前年的第一天;
  • 使用 temporaladjusters.previous(dayofweek.saturday) 得到上一个周六;
  • 使用 temporaladjusters.lastinmonth(dayofweek.friday) 得到本月最后一个周五。
        system.out.println("//本月的第一天");
        system.out.println(localdate.now().with(temporaladjusters.firstdayofmonth()));
        system.out.println("//今年的程序员日");
        system.out.println(localdate.now().with(temporaladjusters.firstdayofyear()).plusdays(255));
        system.out.println("//今天之前的一个周六");
        system.out.println(localdate.now().with(temporaladjusters.previous(dayofweek.saturday)));
        system.out.println("//本月最后一个工作日");
        system.out.println(localdate.now().with(temporaladjusters.lastinmonth(dayofweek.friday)));
  1. 可以直接使用 lanbda 表达式进行自定义的时间调整
 system.out.println(localdate.now().with(temporal -> temporal.plus(threadlocalrandom.current().nextint(100), chronounit.days)));

除了计算外,还可以判断日期是否符合某个条件。比如,自定义函数,判断指定日期是否是家庭成员的生日:

public class datetimetest {
    private static localdatetime localdatetime = localdatetime.now();

    public static void main(string[] args) {
        system.out.println(isfamilybirthday(localdatetime));
    }
    public static boolean isfamilybirthday(localdatetime date) {
        int month = date.getmonthvalue();
        int day = date.getdayofmonth();
        if (month == month.july.getvalue() && day == 10)
            return boolean.true;
        if (month == month.september.getvalue() && day == 21)
            return boolean.true;
        if (month == month.may.getvalue() && day == 22)
            return boolean.true;
        return boolean.false;
    }
}