版权声明:转发请注明,谢谢配合 https://blog.csdn.net/qq_31289187/article/details/84791199
一、写代码经常用到时间格式化,时间相加减(想知道前一天和后一天,等等),Java 8通过发布新的Date-Time API (JSR 310)来进一步加强对日期与时间的处理。
二、主要内容
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" 东加塔布