LocalData和LocalDataeTime的使用

本文介绍Java中LocalDate和LocalDateTime的基本用法,包括日期时间的创建、转换、加减操作及日期间隔计算等。同时提供了实用代码示例,帮助读者快速掌握日期时间处理技巧。

LocalData和LocalDataeTime的使用

import cn.hutool.core.date.DateUtil;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Date;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.ChineseDate;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.google.common.collect.Lists;
import org.apache.http.client.utils.DateUtils;

import java.nio.charset.Charset;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.Month;
import java.time.Period;
import java.time.format.DateTimeFormatter;
import java.time.format.FormatStyle;
import java.util.*;

import static java.time.temporal.TemporalAdjusters.firstInMonth;

public class LocalDateTest {
    public static void main(String[] args) {

        LocalDate localDate = LocalDate.now();

        //当前日期最小时间 00:00:00
        //当前日期最大时间 23:59:59
        LocalDateTime min = LocalDateTime.of(LocalDate.now(), LocalTime.MIN);
        LocalDateTime max = LocalDateTime.of(LocalDate.now(), LocalTime.MAX);
        Date minDate = Date.from(min.atZone(ZoneId.systemDefault()).toInstant());
        Date maxDate = Date.from(max.atZone(ZoneId.systemDefault()).toInstant());

        //String转LocalDate
        LocalDate.parse("2020-02-02", DateTimeFormatter.ISO_DATE);
        LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE);

        //LocalDate 转 String
        String format = DateUtil.format(LocalDateTime.of(LocalDate.now(), LocalTime.MIN), "yyyy-MM-dd HH:mm:ss");

        String minStr = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
        String maxStr = LocalDateTime.of(LocalDate.now(), LocalTime.MAX).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

        //当前日期减1天
        localDate.minusMonths(1);
        //+1
        localDate.plusDays(1);
        //日期和日期之间的运算
		LocalDate oneDay= LocalDate.parse("2023-01-01", dateTimeFormatter);
        LocalDate twoDay= LocalDate.parse("2023-04-01", dateTimeFormatter);
        long until = twoDay.until(oneDay, ChronoUnit.DAYS);
        //得到的结果是90
        System.out.println(until);		
        
        // 等于Date.getTime()  结果:1648396800000
        long l = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).toInstant(ZoneOffset.of("+8")).toEpochMilli();

        //这一天的这个月的第一天
        LocalDateTime firstday = LocalDateTime.now().with(TemporalAdjusters.firstDayOfMonth());

        Date date = new Date();
        //这个月所属年 结果2022
        int year = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().getYear();
    
		//int year = 2022;
        
	}
	//一,获取设定年月开始后每一个星期一、二...
	private static void getWeek(int year){
		LocalDate now = LocalDate.of(year, Month.JANUARY, 1);
        DayOfWeek dayOfWeek = LocalDate.now().minusDays(1l).getDayOfWeek();
        // 查找一年中的第一个星期日
        LocalDate sunday = now.with(firstInMonth(DayOfWeek.WEDNESDAY));
        List<String> dayList = Lists.newArrayList();
        do {
            dayList.add(sunday.format(DateTimeFormatter.ISO_DATE));
            // 通过将Period.ofDays(7)添加到当前星期日来循环获取每个星期日。
            sunday = sunday.plus(Period.ofDays(Calendar.DAY_OF_WEEK));
        } while (sunday.getYear() == year);
        log.log(dayList);
	}
	//二 获取固定星期几
	public static String getWeek(String sdate) throws ParseException {
        // 再转换为时间
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        String[] weeks = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};
        Date parseDate = dateFormat.parse(sdate);
        Calendar c = Calendar.getInstance();
        c.setTime(parseDate);
        int week_index = c.get(Calendar.DAY_OF_WEEK) - 1;
        if (week_index < 0) {
            week_index = 0;
        }
        return weeks[week_index];
    }
    //获取节假日
    public static Map<Integer,String> getHoliday() {
        int year = LocalDate.now().getYear();
        Map<Integer,String> map = new HashMap<>();

        //元旦节
        map.put(HolidayEnum.NEWYEARDAY.getCode(),year + "-1-1");
        //除夕
        ChineseDate chinesenewYear = new ChineseDate(year, 12, 30);
        map.put(8,DateUtil.format(chinesenewYear.getGregorianDate(),"yyyy-MM-dd"));
        //春节
        ChineseDate chinesenewYearFestival = new ChineseDate(year, 1, 1);
        map.put(HolidayEnum.CHINESENEWYEARGREGORIANFESTIVAL.getCode(),DateUtil.format(chinesenewYearFestival.getGregorianDate(),"yyyy-MM-dd"));
        //清明节
        int param = year - 2000;
        int qingmingDay = (int) (param * 0.2422 + 4.81) - param / 4;
        map.put(HolidayEnum.QINGMINGFESTIVAL.getCode(),year + "-4-" + qingmingDay);
        //劳动节
        map.put(HolidayEnum.LABORDAY.getCode(),year + "-5-1");
        //端午节
        ChineseDate dragonBoatFestival = new ChineseDate(year, 5, 5);
        map.put(HolidayEnum.DRAGONBOATGREGORIANFESTIVAL.getCode(),DateUtil.format(dragonBoatFestival.getGregorianDate(),"yyyy-MM-dd"));
        //中秋节
        ChineseDate midAutumnFestival = new ChineseDate(year, 8, 15);
        map.put(HolidayEnum.MIDAUTUMNGREGORIANFESTIVAL.getCode(),DateUtil.format(midAutumnFestival.getGregorianDate(),"yyyy-MM-dd"));
        //国庆节
        map.put(HolidayEnum.NATIONALDAY.getCode(),year + "-10-1");
        return map;
    }
    //获取百度 法定节假日
    public static Map<Integer,String> queryHoliday(){

        Map<String,Object> map = new HashMap<>();
        map.put("resource_id","39043");
        map.put("format","json");
        map.put("tn","wisetpl");
        int year = LocalDate.now().getYear();
        int [] queryMonth = {2,5,8,11};
        String term = "";
        Map<String, List<String>> holidayMap = new HashMap<>();
        for (int i = 0; i < queryMonth.length; i++) {
            map.put("query",year+"年"+queryMonth[i]+"月");
            String result = HttpUtil.get("https://opendata.baidu.com/api.php", map);
            JSONObject jsonObject = JSON.parseObject(result);
            if (ObjectUtil.isNotNull(JSONUtil.parseArray(jsonObject.get("data")))){
                JSONArray data = JSONUtil.parseArray(jsonObject.get("data"));
                JSONArray almanac = JSONUtil.parseArray(JSONUtil.parseObj(data.get(0)).get("almanac"));

                for (Object o : almanac) {
                    cn.hutool.json.JSONObject object = JSONUtil.parseObj(o);
                    //status = 1 表示休假
                    if (ObjectUtil.isNotNull(object.get("status")) && object.get("status").equals("1")){
                        /*if (ObjectUtil.isNotNull(object.get("term"))){
                            String termStr = object.get("term").toString();
                            if (StringUtils.isNotBlank(HolidayEnum.getCodeByMessage(termStr))){
                                term  = HolidayEnum.getCodeByMessage(termStr);
                            }
                        }*/
                        DateTime parse = DateUtil.parse(object.get("year") + "-" + object.get("month") + "-" + object.get("day"));
                        String format = DateUtil.format(parse, "yyyy-MM-dd");

                        /*if (holidayMap.containsKey(term)){
                            List<String> stringList = holidayMap.get(term);
                            stringList.add(format);
                            holidayMap.put(term,stringList);
                        }else {
                            List<String> stringList = new ArrayList<>();
                            stringList.add(format);
                            holidayMap.put(term,stringList);
                        }*/
                        System.out.println(format);
                    }
                }
            }
        }
        return null;
    }
}


参考:
LocalDate和LocalDateTime基本使用方法

Oracle 时间格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值