时间API的使用

简介: 时间API的使用

几种时间API



1.java.util.Date和java.util.Calendar:这两个类是Java早期的时间API,已经过时,不推荐使用。

2.java.time包:Java 8引入了一个新的时间API,该API包括多个类,例如:

  1. LocalDate:表示日期,例如2021-10-01。
  2. LocalTime:表示时间,例如14:30:00。
  3. LocalDateTime:表示日期和时间,例如2021-10-01T14:30:00。
  4. ZonedDateTime:表示带时区的日期和时间。
  5. Period:表示日期之间的时间差。
  6. Duration:表示时间之间的时间差。
  7. 无解的ChronoUnit : 获取时间的天数、分钟、月份、 年份…..

3.java.sql.Date和java.sql.Time:这两个类是Java中用于处理数据库时间的API,通常情况下不需要使用。


我们常用的就是time包下的时间API 以及 Util包下的


Java. time


LocalDate:表示日期例如2021-10-01。

对于LocalDate 这是实现类 ,我们可以进行很多操作, 一般我们可以和Period:表示日期之间的时间差 进行联动使用


image-20230405123424468.png


它的三个参数分别代表 :年 、月、该月第几天


其中封装的Period.between(begin, end);方法是我们最长用的 ,它可以帮我们得出两个时间段地天数差、 年份差、月份差….


public static void main(String[] args) {
    LocalDate begin = LocalDate.of(2001,2,12);
    LocalDate end = LocalDate.of(2021,8,21);
    Period period = Period.between(begin, end);
    //todo 比较两个时间段的年份差
    System.out.println(period.getYears());
    //todo 比较两个时间段的月份差
    System.out.println(period.getMonths());
    //todo 比较两个时间段的天数差
    System.out.println(period.getDays());
}


如果想上面那样仅仅做简单地调用 , 那么他们比较地仅仅是相同单位下地,而不是所有的。换句话说就是要他比较月份 他就不会管是哪年 ,而是只比较两个月之间的差距


如果想要得出实实在在的两个时间时间的月份的大小


  • ```java

//todo 比较两个时间段的月份差

int months = period.getYears() * 12 + period.getMonths();

// 获者直接使用 更加方便得出

long months = ChronoUnit.MONTHS.between(begin, end);

System.out.println(months);


//得出的结果按照上面的begin 和 end 来算就是相差 246 个月


同样的,如果想实实在在的得出两个时间的天数
- ```java
  LocalDate startDate = LocalDate.of(2021, 1, 1);
  LocalDate endDate = LocalDate.of(2022, 1, 10);
  //todo 得出两个时间的天数
  long daysBetween = ChronoUnit.DAYS.between(startDate, endDate);
  System.out.println("起始日期:" + startDate);
  System.out.println("结束日期:" + endDate);
  System.out.println("天数差:" + daysBetween);


LocalDateTime:表示时间-例如14:30:00


  • 获取详细的时间分钟数


//todo 获取两个时间段的分钟数
LocalDateTime of1 = LocalDateTime.of(2023, 6, 1, 11, 21);
LocalDateTime of2 = LocalDateTime.of(2023, 6, 6, 10, 50);
long between = ChronoUnit.MINUTES.between(of1, of2);
System.out.println(between);
  • 获取详细的时间秒


//todo 获取两个时间段的秒数
long seconds = ChronoUnit.SECONDS.between(of1, of2);
System.out.println(seconds);
  • 获取两个时间段的周数


//todo 获取两个时间段的周数
long weeks = ChronoUnit.WEEKS.between(of1, of2);
System.out.println(weeks);


Utils


相关时间API


public static void main(String[] args) throws ParseException {
    SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm");
    /*天数差*/
    Date fromDate1 = simpleFormat.parse("2018-03-01 12:00");
    Date toDate1 = simpleFormat.parse("2018-03-12 12:00");
    long from1 = fromDate1.getTime();
    System.out.println(from1);
    long to1 = toDate1.getTime();
    int days = (int) ((to1 - from1) / (1000 * 60 * 60 * 24));
    System.out.println("两个时间之间的天数差为:" + days);
    StringBuilder  sb = new StringBuilder();
    StringBuilder reverse = sb.reverse();
    System.out.println(reverse);
    /*小时差*/
    Date fromDate2 = simpleFormat.parse("2018-03-01 12:00");
    Date toDate2 = simpleFormat.parse("2018-03-12 12:00");
    long from2 = fromDate2.getTime();
    long to2 = toDate2.getTime();
    int hours = (int) ((to2 - from2) / (1000 * 60 * 60));
    System.out.println("两个时间之间的小时差为:" + hours);
    /*分钟差*/
    Date fromDate3 = simpleFormat.parse("2018-03-01 12:00");
    Date toDate3 = simpleFormat.parse("2018-03-12 12:00");
    long from3 = fromDate3.getTime();
    long to3 = toDate3.getTime();
    int minutes = (int) ((to3 - from3) / (1000 * 60));
    System.out.println("两个时间之间的分钟差为:" + minutes);
}


蓝桥真题



题目描述


本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。


小蓝每天都锻炼身体。


正常情况下,小蓝每天跑 11 千米。如果某天是周一或者月初(11 日),为了激励自己,小蓝要跑 22 千米。如果同时是周一或月初,小蓝也是跑 22 千米。


小蓝跑步已经坚持了很长时间,从 20002000 年 11 月 11 日周六(含)到 20202020 年 1010 月 11 日周四(含)。请问这段时间小蓝总共跑步多少千米?


/*获取两个时间点之间的周数*/
LocalDate time1 = LocalDate.of(2000, 1, 1);
LocalDate time2 = LocalDate.of(2020, 10, 2);
int sum = 0;
LocalDate time  = time1;
while (!time.equals(time2)){
    if(time.getDayOfWeek().getValue() == 1 || time.getDayOfMonth() == 1){
        sum+=2;
    }else{
        sum+=1;
    }
    // 时间数 + 1
    time = time.plusDays(1);
}
System.out.println("sum ==" + sum);



目录
相关文章
|
API 对象存储
可能是由于API请求的策略已经过期
可能是由于API请求的策略已经过期
73 3
|
架构师 测试技术 API
为什么要 API 优先?
最近关于 API-First (API 优先)作为设计和开发方法的讨论很多,虽然通向 API-First 的途径有很多,但通常推动 API-First 的一般都是 API 架构师、API 设计师和 API 平台负责人等,很好理解,因为他们对组织中 API 的效率、互操作性和质量最感兴趣。 因此,这些支持者制定了与团队其他成员共享的 API 指南和标准。对于开发人员来说,API 优先似乎是一个崇高目标,但实施该方法时动力和紧迫性经常会减弱。结果导致开发者可能难以遵守这些政策。 管理层关心 API 管理,那其他人为什么也应该关心呢?
103 0
|
存储 安全 编译器
内存相关API
Windows操作系统的内存有三种属性,分别为:可读、可写、可执行,并且操作系统将每个进程的内存都隔离开来,当进程运行时,创建一个虚拟的内存空间,系统的内存管理器将虚拟内存空间映射到物理内存上,所以每个进程的内存都是等大的。
136 0
|
安全 Java API
简单使用时间API(LocalDateTime)
简单使用时间API(LocalDateTime)
124 0
|
4月前
|
Web App开发 JavaScript
vue报错【解决方案】 [Violation] Added non-passive event listener to a scroll-blocking <some> event.
vue报错【解决方案】 [Violation] Added non-passive event listener to a scroll-blocking <some> event.
442 0
|
JSON API 开发工具
API参考—实例管理—CreateDBInstance
API参考—实例管理—CreateDBInstance
155 0
|
XML JSON API
API参考—实例管理—RestartDBInstance
调用RestartDBInstance接口重启实例。
|
XML JSON API
API参考—实例管理—DeleteDBInstance
调用DeleteDBInstance接口释放实例。
|
XML JSON API
API参考—实例管理—DescribeDBInstances
调用DescribeDBInstances接口查看实例列表详情。
202 0
|
XML JSON API
API参考—实例管理—ModifyDBInstanceDescription
调用ModifyDBInstanceDescription接口修改实例描述。