JDK新特性-LocalDateTime

版权声明:转发请注明,谢谢配合 https://blog.csdn.net/qq_31289187/article/details/84791199

菜鸟教程

一、写代码经常用到时间格式化,时间相加减(想知道前一天和后一天,等等),Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。

二、主要内容

1、NewDateUtils类JavaDoc开发文档

2、NewDateEnum:几种实际开发中用到的时间格式

package com.dl.jdk18;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;


/**
 * Created by yanshao on 2018/12/4.
 */
public class NewDateUtils {

    //北京时间
    private static final String BEIJING = "Asia/Shanghai";
    //国际时间
    private static final String UTC = "Europe/London";

    /**
     * 获取指定year、month、day的LocalDateTime对象
     * @param year   年:2018
     * @param month  月:12
     * @param day    日:4
     * @return
     * */
    public static LocalDateTime getLocalDateTime(int year,int month,int day){
        return LocalDateTime.of(year,month,day,0,0);
    }
    /**
     * 获取指定year、month、day、minute,second的LocalDateTime对象
     * @param year   年:2018
     * @param month  月:12
     * @param day    日:4
     * @param hour   小时:18
     * @param minute 分钟:45
     * @param second 秒:22
     * @return
     * */
    public static LocalDateTime getLocalDateTime(int year,int month,int day,int hour,int minute,int second){
        return LocalDateTime.of(year,month,day,hour,minute,second);
    }

    /**
     * 获取当前指定格式的时间串
     * @param dateFormat 枚举类型,时间格式
     * @return 返回指定格式的时间串
     * */
    public static String format(NewDateEnum dateFormat){
        return LocalDateTime
                .now()
                .format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 自定义时间格式,获取当前指定格式的时间串
     * @param dateFormat 时间格式,例如:yyyy-MM-dd
     * @return 返回指定格式的时间串
     * */
    public static String format(String dateFormat){
        return LocalDateTime
                .now()
                .format(DateTimeFormatter.ofPattern(dateFormat));
    }
    /**
     * 获取当前指定时区的时间
     * @param zoneId 时区,例如北京时间:Asia/Shanghai
     * @param dateFormat 自定义返回的时间格式
     * @return
     * */
    public static String format(String zoneId,String dateFormat){
        return LocalDateTime
                .now(ZoneId.of(zoneId))
                .format(DateTimeFormatter.ofPattern(dateFormat));
    }
    /**
     * 获取当前指定时区的时间
     * @param zoneId  时区,例如北京时间:Asia/Shanghai
     * @param dateFormat  返回的时间格式,枚举类型
     * @return
     * */
    public static String format(String zoneId,NewDateEnum dateFormat){
        return LocalDateTime.now(ZoneId.of(zoneId)).format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String format(Date date,NewDateEnum dateFormat){
        //系统所在时区
        return LocalDateTime
                .now()
                .ofInstant(date.toInstant(),ZoneId.systemDefault())
                .format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String format(Date date,String dateFormat){
        //系统所在时区
        return LocalDateTime
                .now()
                .ofInstant(date.toInstant(),ZoneId.systemDefault())
                .format(DateTimeFormatter.ofPattern(dateFormat));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param zoneId 时区
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String format(String zoneId,Date date,String dateFormat){
        return LocalDateTime
                .now()
                .ofInstant(date.toInstant(),ZoneId.of(zoneId))
                .format(DateTimeFormatter.ofPattern(dateFormat));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param zoneId 时区
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String format(String zoneId,Date date,NewDateEnum dateFormat){
        return LocalDateTime.now()
                .ofInstant(date.toInstant(),ZoneId.of(zoneId))
                .format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param localDateTime 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String format(LocalDateTime localDateTime,NewDateEnum dateFormat){
        return localDateTime
                .format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param zoneId 时区
     * @param localDateTime 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String format(String zoneId,LocalDateTime localDateTime,NewDateEnum dateFormat){
        return localDateTime
                .atZone(ZoneId.of(zoneId))
                .format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param plusDays 加减天数
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String formatPlus(Long plusDays,Date date,String dateFormat){
        return LocalDateTime
                .ofInstant(date.toInstant(),ZoneId.systemDefault())
                .plusDays(plusDays)
                .format(DateTimeFormatter.ofPattern(dateFormat));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param plusDays 加减天数
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String formatPlus(Long plusDays,Date date,NewDateEnum dateFormat){
        return LocalDateTime
                .ofInstant(date.toInstant(),ZoneId.systemDefault())
                .plusDays(plusDays)
                .format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param plusDays 加减天数
     * @param localDateTime 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String formatPlus(Long plusDays,LocalDateTime localDateTime,NewDateEnum dateFormat){
        return localDateTime
                .plusDays(plusDays)
                .format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param plusDays 加减天数
     * @param localDateTime 指定时间
     * @param dateFormat 指定返回的时间格式
     * @param zoneId 指定时区
     * @return
     * */
    public static String formatPlus(Long plusDays,LocalDateTime localDateTime,NewDateEnum dateFormat,String zoneId){
        return localDateTime
                .atZone(ZoneId.of(zoneId))
                .plusDays(plusDays)
                .format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
}

3、NewDateUtils

package com.dl.jdk18;

import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Date;


/**
 * Created by yanshao on 2018/12/4.
 */
public class NewDateUtils {

    //北京时间
    private static final String BEIJING = "Asia/Shanghai";
    //国际时间
    private static final String UTC = "Europe/London";

    /**
     * 获取当前指定格式的时间串
     * @param dateFormat 枚举类型,时间格式
     * @return 返回指定格式的时间串
     * */
    public static String format(NewDateEnum dateFormat){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 自定义时间格式,获取当前指定格式的时间串
     * @param dateFormat 时间格式,例如:yyyy-MM-dd
     * @return 返回指定格式的时间串
     * */
    public static String format(String dateFormat){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateFormat));
    }
    /**
     * 获取当前指定时区的时间
     * @param zoneId 时区,例如北京时间:Asia/Shanghai
     * @param dateFormat 自定义返回的时间格式
     * @return
     * */
    public static String format(String zoneId,String dateFormat){
        return LocalDateTime.now(ZoneId.of(zoneId)).format(DateTimeFormatter.ofPattern(dateFormat));
    }
    /**
     * 获取当前指定时区的时间
     * @param zoneId  时区,例如北京时间:Asia/Shanghai
     * @param dateFormat  返回的时间格式,枚举类型
     * @return
     * */
    public static String format(String zoneId,NewDateEnum dateFormat){
        return LocalDateTime.now(ZoneId.of(zoneId)).format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String format(Date date,NewDateEnum dateFormat){
        //系统所在时区
        return LocalDateTime.now().ofInstant(date.toInstant(),ZoneId.systemDefault()).
                format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String format(Date date,String dateFormat){
        //系统所在时区
        return LocalDateTime.now().ofInstant(date.toInstant(),ZoneId.systemDefault()).
                format(DateTimeFormatter.ofPattern(dateFormat));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param zoneId 时区
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String format(String zoneId,Date date,String dateFormat){
        return LocalDateTime.now().ofInstant(date.toInstant(),ZoneId.of(zoneId)).
                format(DateTimeFormatter.ofPattern(dateFormat));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param zoneId 时区
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String format(String zoneId,Date date,NewDateEnum dateFormat){
        return LocalDateTime.now().ofInstant(date.toInstant(),ZoneId.of(zoneId)).
                format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param plusDays 加减天数
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String formatPlus(Long plusDays,Date date,String dateFormat){
        return LocalDateTime.ofInstant(date.toInstant(),ZoneId.systemDefault()).
                plusDays(plusDays).format(DateTimeFormatter.ofPattern(dateFormat));
    }
    /**
     * 获取指定时间,指定返回时间格式的时间串
     * @param plusDays 加减天数
     * @param date 指定时间
     * @param dateFormat 指定返回的时间格式
     * @return
     * */
    public static String formatPlus(Long plusDays,Date date,NewDateEnum dateFormat){
        return LocalDateTime.ofInstant(date.toInstant(),ZoneId.systemDefault()).
                plusDays(plusDays).format(DateTimeFormatter.ofPattern(dateFormat.getDateFormat()));
    }
}

这个utils中,有自定义时间格式,指定时间、指定时区、指定相加减天数的方法

4、NewDateTest:测试案例

package com.dl.jdk18;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Date;

/**
 * Created by yanshao on 2018/12/4.
 */
public class NewDateTest {
    public static void test(){
        LocalDateTime localDateTime = LocalDateTime.now();

        String str1 = localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
        System.out.println("ISO_LOCAL_DATE_TIME>>"+str1);

        String str2 = localDateTime.format(DateTimeFormatter.ISO_LOCAL_DATE);
        System.out.println("ISO_LOCAL_DATE>>"+str2);
        String str3 = localDateTime.format(DateTimeFormatter.ISO_TIME);
        System.out.println("ISO_TIME>>"+str3);
        String str4 = localDateTime.format(DateTimeFormatter.BASIC_ISO_DATE);
        System.out.println("BASIC_ISO_DATE>>"+str4);
        String str5 = localDateTime.format(DateTimeFormatter.ISO_DATE);
        System.out.println("ISO_DATE>>"+str5);
        String str6 = localDateTime.format(DateTimeFormatter.ISO_DATE_TIME);
        System.out.println("ISO_DATE_TIME>>"+str6);
    }
    public static void test2(){
        String beijing = "Asia/Shanghai";
        System.out.println(NewDateUtils.format(NewDateEnum.DATE_FORMAT_4));
        System.out.println(NewDateUtils.format("yyyy-MM"));
        System.out.println(NewDateUtils.format(beijing,NewDateEnum.DATE_FORMAT_4.getDateFormat()));
        System.out.println(NewDateUtils.format(beijing,NewDateEnum.DATE_FORMAT_4));
        System.out.println(NewDateUtils.format(new Date(),NewDateEnum.DATE_FORMAT_1));
        System.out.println(NewDateUtils.format(beijing,new Date(),"HH/mm/ss/SSS"));
        System.out.println(NewDateUtils.formatPlus(2L,new Date(),NewDateEnum.DATE_FORMAT_3));
        System.out.println(NewDateUtils.formatPlus(-2L,new Date(),NewDateEnum.DATE_FORMAT_3));
    }
    public static void main(String[] args) {
        test();
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>");
        test2();
    }
}

5、JDK8-常用的几种时间格式

ISO_LOCAL_DATE_TIME>>2018-12-04T16:40:23.941
ISO_LOCAL_DATE>>2018-12-04
ISO_TIME>>16:40:23.941
BASIC_ISO_DATE>>20181204
ISO_DATE>>2018-12-04
ISO_DATE_TIME>>2018-12-04T16:40:23.941

6、zoneId列表(常用的都可以查到)


	"Asia/Shanghai" 中国标准时间 (北京)
	"Asia/Hong_Kong" 香港时间 (香港)
	"Asia/Taipei" 台北时间 (台北)
	"Asia/Seoul" 首尔
	"Asia/Tokyo" 日本时间 (东京)
	"America/New_York" 美国东部时间 (纽约)
	"America/Denver" 美国山区时间 (丹佛)
	"America/Costa_Rica" 美国中部时间 (哥斯达黎加)
    "America/Chicago" 美国中部时间 (芝加哥)
    "America/Mexico_City" 美国中部时间 (墨西哥城)
    "America/Regina" 美国中部时间 (里贾纳)
    "America/Los_Angeles" 美国太平洋时间 (洛杉矶)
    "Pacific/Majuro" 马朱罗
    "Pacific/Midway" 中途岛
    "Pacific/Honolulu" 檀香山
    "America/Anchorage" 安克雷奇
    "America/Tijuana" 美国太平洋时间 (提华纳)
    "America/Phoenix" 美国山区时间 (凤凰城)
    "America/Chihuahua" 奇瓦瓦
    "America/Bogota" 哥伦比亚时间 (波哥大)
    "America/Caracas" 委内瑞拉时间 (加拉加斯)
    "America/Barbados" 大西洋时间 (巴巴多斯)
    "America/Manaus" 亚马逊标准时间 (马瑙斯)
    "America/St_Johns" 纽芬兰时间 (圣约翰)
    "America/Santiago" 圣地亚哥
    "America/Argentina/Buenos_Aires" 布宜诺斯艾利斯
    "America/Godthab" 戈特霍布
    "America/Montevideo" 乌拉圭时间 (蒙得维的亚)
    "America/Sao_Paulo" 圣保罗
    "Atlantic/South_Georgia" 南乔治亚
    "Atlantic/Azores" 亚述尔群岛
    "Atlantic/Cape_Verde" 佛得角
    "Africa/Casablanca" 卡萨布兰卡
    "Europe/London" 格林尼治标准时间 (伦敦)
    "Europe/Amsterdam" 中欧标准时间 (阿姆斯特丹)
    "Europe/Belgrade" 中欧标准时间 (贝尔格莱德)
    "Europe/Brussels" 中欧标准时间 (布鲁塞尔)
    "Europe/Sarajevo" 中欧标准时间 (萨拉热窝)
    "Africa/Brazzaville" 西部非洲标准时间 (布拉扎维)
    "Africa/Windhoek" 温得和克
    "Asia/Amman" 东欧标准时间 (安曼)
    "Europe/Athens" 东欧标准时间 (雅典)
    "Asia/Beirut" 东欧标准时间 (贝鲁特)
    "Africa/Cairo" 东欧标准时间 (开罗)
    "Europe/Helsinki" 东欧标准时间 (赫尔辛基)
    "Asia/Jerusalem" 以色列时间 (耶路撒冷)
    "Africa/Harare" 中部非洲标准时间 (哈拉雷)
    "Europe/Minsk" 明斯克
    "Asia/Baghdad" 巴格达
    "Europe/Moscow" 莫斯科
    "Asia/Kuwait" 科威特
    "Africa/Nairobi" 东部非洲标准时间 (内罗毕)
    "Asia/Tehran" 伊朗标准时间 (德黑兰)
    "Asia/Baku" 巴库
    "Asia/Tbilisi" 第比利斯
    "Asia/Yerevan" 埃里温
    "Asia/Dubai" 迪拜
    "Asia/Kabul" 阿富汗时间 (喀布尔)
    "Asia/Karachi" 卡拉奇
    "Asia/Oral" 乌拉尔
    "Asia/Yekaterinburg" 叶卡捷林堡
    "Asia/Calcutta" 加尔各答
    "Asia/Colombo" 科伦坡
    "Asia/Katmandu" 尼泊尔时间 (加德满都)
    "Asia/Almaty" 阿拉木图
    "Asia/Rangoon" 缅甸时间 (仰光)
    "Asia/Krasnoyarsk" 克拉斯诺亚尔斯克
    "Asia/Bangkok" 曼谷
    "Asia/Irkutsk" 伊尔库茨克时间 (伊尔库茨克)
    "Asia/Kuala_Lumpur" 吉隆坡
    "Australia/Perth" 佩思
    "Asia/Yakutsk" 雅库茨克时间 (雅库茨克)
    "Australia/Darwin" 达尔文
    "Australia/Brisbane" 布里斯班
    "Asia/Vladivostok" 海参崴时间 (符拉迪沃斯托克)
    "Pacific/Guam" 关岛
    "Australia/Adelaide" 阿德莱德
    "Australia/Hobart" 霍巴特
    "Australia/Sydney" 悉尼
    "Asia/Magadan" 马加丹时间 (马加丹)
    "Pacific/Auckland" 奥克兰
    "Pacific/Fiji" 斐济
    "Pacific/Tongatapu" 东加塔布

猜你喜欢

转载自blog.csdn.net/qq_31289187/article/details/84791199