package com.yn.bftl.thirdparty.common.util;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import org.joda.time.DateTime;

import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

/**
 * @Author：Vance
 * @Description：
 * @Date：2023/3/2 13:34
 */
public class DateTimeUtils {

    /**
     * 时间转化
     *
     * @param dateStr RFC3339格式时间
     * @return LocalDateTime
     * @description
     * @author huabiao
     * @create 2022/12/28  11:24
     */
    public static LocalDateTime getLocalDateTimeByRFC3339(String dateStr) {
        DateTime dateTime = new DateTime(dateStr);
        long timeInMillis = dateTime.toCalendar(Locale.getDefault()).getTimeInMillis();
        ZoneId zoneId = ZoneId.systemDefault();
        return Instant.ofEpochMilli(timeInMillis).atZone(zoneId).toLocalDateTime();
    }

    public static String setDateTimeToRFC3339(String dateStr) {
        if(ObjectUtil.isNotEmpty(dateStr)) {
            return DateUtil.format(Convert.toLocalDateTime(dateStr) ,"yyyy-MM-dd'T'HH:mm:ssXXX");
        }
        else {
            return null;
        }

    }

    public static String getDateTimeToRFC3339(String dateStr ) {
        if(ObjectUtil.isNotEmpty(dateStr)) {
            return getDateTimeToRFC3339( dateStr,"yyyyMMddHHmmss");
        }
        else {
            return null;
        }
    }

    public static String getDateTimeToRFC3339(String dateStr, String pattern ) {
        // 定义日期格式
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);

        // 解析原始字符串为 LocalDateTime
        LocalDateTime localDateTime = LocalDateTime.from(formatter.parse(dateStr));

        // 转换为 系统默认 时区的 ZonedDateTime
        ZoneId zoneId = ZoneId.systemDefault();
        ZonedDateTime zonedDateTime = localDateTime.atZone(zoneId);

        // 使用 ISO 8601 标准的 DateTimeFormatter 格式化时间
        DateTimeFormatter rfc3339Formatter = DateTimeFormatter.ISO_ZONED_DATE_TIME;
        return zonedDateTime.format(rfc3339Formatter);
    }
}
