Java8 时间计算 LocalDate 变化

mysql中日期函数 NOW()和SYSDATE()

计算小于7天的数据
DATE_SUB(DATE_ADD(b.make_date, INTERVAL + esfm.deadline DAY), INTERVAL 7 DAY) <= CURRENT_DATE

DATE_SUB(date,INTERVAL expr type) 函数从日期减去指定的时间间隔。
DATE_ADD(date,INTERVAL expr type) 函数向日期添加指定的时间间隔。

java8: 计算时间差值
Duration.between(start_time, end_time).toMillis()
Duration与Period相对应,Period用于处理日期,而Duration计算时间差还可以处理具体的时间,也是通过调用其静态的between方法,该方法为between(Temporal startInclusive,Temporal endExclusive),因此可以传入两个Instant的实例(Instant实现了Temporal接口),并可以以毫秒(toMills)、秒(getSeconds)等多种形式表示得到的时间差。

public static void main(String[] agrs) {
 
		int n = 10;
		int[] arr = SortTestHelper.generateRandomArray(n, 0, n);
		int[] arr2 = SortTestHelper.copy(arr, n);
		// int[] te=new int[]{2,6,3,1,4,7,5,8,9,10};
		System.out.println(); 
		Instant start_time = Instant.now();// 开始时间
		SelectSort.SelectSort(arr, n);
		Instant end_time = Instant.now();// 结束时间
		SortTestHelper.printArray(arr, n);
		System.out.println("时间差为:" + Duration.between(start_time, end_time).toMillis());
 
		start_time = Instant.now();// 开始时间
		insertionSort.insertionSort(arr2, n);
		end_time = Instant.now();// 结束时间
		SortTestHelper.printArray(arr2, n);
		System.out.println("时间差为:" + Duration.between(start_time, end_time).toMillis());
 
	}

一、类型转换

String 类型转localDate
LocalDate beginDateTime = LocalDate.parse(beginDate, DateTimeFormatter.ofPattern(“yyyy-MM-dd”));

date类型转localDate
Date dates = new SimpleDateFormat(“yyyyMM”).parse(cycle);
Instant instant = dates.toInstant();
ZoneId zoneId = ZoneId.systemDefault();
LocalDate localDate = instant.atZone(zoneId).toLocalDate();

二、LocalDate – API

类方法:

1、LocalDate nowDate = LocalDate.now();  获取当前日期:2019-03-21

2、LocalDate formatDate = LocalDate.parse("2018-08-08");  自定义时间:2018-08-08

实例方法:

1、nowDate.getDayOfMonth()  :21  (获取当天所属本月中的第几天)

2、nowDate.getDayOfYear()  :80  (获取当天所属本年中的第几天)

3、nowDate.getDayOfWeek()  :THURSDAY (获取当天所属本周的周几)

      nowDate.getDayOfWeek() .getValue() :4

4、nowDate.getMonth()  :MARCH  (获取当月所属本年的第几月,与new Date() 相比它是从1开始,抛弃了之前的从0开始)

      nowDate.getMonth().getVlue():3

      nowDate.getMonthVlue() :3

5、nowDate.getYear()  :2019  (获取年)

6、nowDate.getEra() :CE  (获取次日期适用的时代)

7、nowDate.with(TemporalAdjusters.firstDayOfMonth()) :2019-03-01(获取本月第一天)

8、nowDate.withDayOfMonth(2) :2019-03-02(获取本月第二天)

9、nowDate.with(TemporalAdjusters.lastDayOfMonth()) :2019-03-01(获取本月最后一天,无须再判断28、29、30、31)

10、nowDate.plusDays(1) :2019-03-22(获取下一天日期)

注:TemporalAdjusters类中有许多常用的特殊的日期的方法(类方法),使用时可以仔细查看,可以很大程度减少日期判断的代码量!

三、LocalTime – API

类方法:

LocalTime nowTime = LocalTime.now();  获取当前时间:16:45:51.591

实例方法:

1、nowTime.getHour() :16(获取小时数)

2、nowTime.getMinute() :45(获取分钟数)

3、nowTime.getSecond() :51(获取秒数)

4、nowTime.getNano() :805000000(获取纳秒数)

5、LocalTime zero = LocalTime.of(0, 0, 0) :00:00:00  (构建自定义时间)

      LocalTime mid = LocalTime.parse("12:00:00") : 12:00:00

四、LocalDateTime – API

类方法:

1、LocalDateTime nowDateTime = LocalDateTime.now();  获取当前日期时间:2019-03-21T16:45:51.591

2、DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:ss");

     String nowDateTime = LocalDateTime.now().format(formatter);

     使用自定义格式器DateTimeFormatter替换了Java8之前的SimpleDateFormat

实例方法:基于上方LocalDate与LocalTime的实例方法,名字相同,可直接调用

五、JDBC与Java8中的Date/Time API关联问题
最新的JDBC整合了Java8中的Date/Time API,将Java8中的Date/Time类型与数据库类型进行了映射

数据库类型 ->  Java类型

date -> LocalDate

time -> LocalTime

timestamp -> LocalDateTime

六、Java 根据字符串日期增加一月、一季度、半年和一年

	public static String getDate(String s,int type) throws ParseException {
        //给定模式(这里给定的模式须与给定日期字符串格式匹配)
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = sdf.parse(s);

        Calendar cal = Calendar.getInstance();
        cal.setTime(date);//设置起时间

        if (type == 1) {
            cal.add(Calendar.YEAR, 1);          //增加一年
        }else if (type == 2) {
            cal.add(Calendar.MONTH, 6);         //增加半年
        }else if (type == 3) {
            cal.add(Calendar.MONTH, 3);         //增加一个季度
        }else if (type == 4) {
            cal.add(Calendar.MONTH, 1);         //增加一个月
        }else if (type == 5){
            cal.add(Calendar.DAY_OF_WEEK, 1);   //增加一个星期(7天)
        }else if (type == 6){
            cal.add(Calendar.DATE, 1);          //增加一个天
        }
        String dateStr = sdf.format(cal.getTime());
        return dateStr;
    }


	//测试
 	public static void main(String[] args) throws ParseException {
 		//输出增加半年之后的日期
        System.out.println(getDate("2020-02-23",2));
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值