java中时间的转换相关问题整理
前言
Java中时间转换主要是以下几种情形
String格式时间转换为Date,LocalDateTime,LocalDate,LocalTime
时间戳转换为Date,LocalDateTime,LocalDate,LocalTime
Date,LocalDateTime,LocalDate,LocalTime转换为String格式时间
Date,LocalDateTime,LocalDate转换为时间戳
Date,LocalDateTime,LocalDate,LocalTime之间的相互转换
具体的转换详细情况如下:
String格式时间转换为Date,LocalDateTime,LocalDate,LocalTime
/*** ----------------------------------------------String转各种时间开始------------------------------------------------------------------*/String source2 = "2022-03-23 12:45:35";// String转各种时间
// 匹配规则写法DateTimeFormatter localDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");DateTimeFormatter localDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");DateTimeFormatter localDateFormatter_short = DateTimeFormatter.ofPattern("yyyy-MM-dd");DateTimeFormatter localTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");DateTimeFormatter localTimeFormatter_short = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalDateTime localDateTime3 = LocalDateTime.parse("2022-03-23 12:45:35", localDateTimeFormatter);System.out.println("String格式时间转换为LocalDateTime: "+localDateTime3);
/*** String-->LocalDate* String-->LocalTime* LocalDate和LocalTime分别没有时分秒和年月日,当长公式匹配是自动舍弃对应的时分秒或年月日* 字符串是长格式yyyy-MM-dd HH:mm:ss,匹配规则也该是yyyy-MM-dd HH:mm:ss* 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-dd*/// String-->LocalDate// 字符串是长格式yyyy-MM-dd HH:mm:ss,匹配规则也该是yyyy-MM-dd HH:mm:ssLocalDate localDate2 = LocalDate.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));System.out.println("String格式时间转换为LocalDate: yyyy-MM-dd HH:mm:ss--> "+localDate2);// 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-ddLocalDate localDate_short = LocalDate.parse("2022-03-23", DateTimeFormatter.ofPattern("yyyy-MM-dd"));System.out.println("String格式时间转换为LocalDate: yyyy-MM-dd --> "+localDate_short);
// String-->LocalTime// 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-ddLocalTime localTime1 = LocalTime.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));System.out.println("String格式时间转换为LocalTime: yyyy-MM-dd HH:mm:ss --> "+localTime1);// 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-ddLocalTime localTime_short = LocalTime.parse("12:45:35", DateTimeFormatter.ofPattern("HH:mm:ss"));System.out.println("String格式时间转换为LocalTime: HH:mm:ss --> "+localTime_short);
/*** String-->Date* 方式一:用SimpleDateFormat的parse,需要处理异常,老式写法,不推荐* // 方式二:用Date的from方法,推荐此写法*/// String-->Date// 方式一:用SimpleDateFormat的parse,需要处理异常
// SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Date parse1 = simpleDateFormat.parse("2022-03-23 12:45:35");
// System.out.println("String格式时间转换为Date: "+parse1);
// 方式二:用Date的from方法,推荐此写法Date from1 = Date.from(LocalDateTime.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).toInstant(ZoneOffset.of("+8")));System.out.println("String格式时间转换为Date: 用Date的from方法 "+from1);
/*** ----------------------------------------------String转各种时间结束------------------------------------------------------------------*/
时间戳转换为Date,LocalDateTime,LocalDate,LocalTime
/*** ----------------------------------------------long转时间类开始------------------------------------------------------------------*/
// 1648344941916<--->"2022/3/27 09:35:41"
long currentTimeTimestamp = Long.parseLong("1648344941916");
// long--->Date
Date date = new Date(currentTimeTimestamp);
System.out.println("long转换为Date: "+date);
// long-->LocalDateTime
// 毫秒级转换
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8"));
System.out.println("long转换为LocalDateTime: "+localDateTime);
// long-->LocalDate
LocalDate localDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8")).toLocalDate();
System.out.println("long转换为LocalDate: "+localDate);
// long-->LocalTime
LocalTime localTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8")).toLocalTime();
System.out.println("long转换为LocalTime: "+localTime);
/*** ----------------------------------------------long转时间类结束------------------------------------------------------------------*/
Date,LocalDateTime,LocalDate,LocalTime转换为String格式时间
/*** ----------------------------------------------时间类转String开始------------------------------------------------------------------*/
// 准别一个LocalTime,14:23:58:234
LocalTime localTime2=LocalTime.of(14,23,58,234);
// 2022-12-12 00:00:00
LocalDate localDate1=LocalDate.of(2022,12,12);
// 2022-12-12 12:13:23:355
LocalDateTime localDateTime1=LocalDateTime.of(2022,12,12,12,13,23);
// 当前时间
Date date1=new Date();
// LocalTime-->String
String format1 = localTime2.format(DateTimeFormatter.ofPattern("HH:mm:ss:SSS"));
System.out.println("14:23:58的LocalTime转换成字符串后是:" + format1);
// LocalDate-->String
String format = localDate1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
System.out.println("LocalDate转String结果:"+format);
// LocalDateTime-->String
String format2 = localDateTime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS"));
System.out.println("LocalDateTime转String结果:"+format2);
// Date-->String
SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
String format3 = simpleDateFormat.format(date1);
System.out.println("Date转String结果:"+format3);
/*** ----------------------------------------------时间类转String结束------------------------------------------------------------------*/
Date,LocalDateTime,LocalDate转换为时间戳
/*** LocalTime无法转为时间戳*/
// 2022-12-12 00:00:00
LocalDate localDate3 = LocalDate.of(2022, 12, 12);
// 2022-12-12 12:13:23:355
LocalDateTime localDateTime4 = LocalDateTime.of(2022, 12, 12, 12, 13, 23);
// 准备一个时间
long currentTimeTimestamp2 = Long.parseLong("1648344941916");
// long--->Date
Date date2 = new Date(currentTimeTimestamp2);
System.out.println("1648344941916:long转换为Date: " + date);//'2022/3/27 09:35:41'
// LocalDate-->时间戳long
long timestamp_localDate = localDate3.atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli();
System.out.println("LocalDate转时间戳long结果:" + timestamp_localDate);
// LocalDateTime-->时间戳long
long timestamp_localDateTime = localDateTime4.toInstant(ZoneOffset.of("+8")).toEpochMilli();
System.out.println("LocalDateTime转时间戳long结果:" + timestamp_localDateTime);
// Date-->时间戳long
long timestamp_Date = date2.toInstant().toEpochMilli();
System.out.println("Date转时间戳long结果:" + timestamp_Date);
/*** ----------------------------------------------时间类转时间戳结束------------------------------------------------------------------*/
Date,LocalDateTime,LocalDate,LocalTime之间的相互转换
参考:LocalDateTime、LocalDate、Date的相互转换
/*** LocalDateTime可以通过toLocalDate()方法和toLocalTime()方法分别得到LocalDate与LocalTIme*/// 准备LocalDateTIme 2022-12-12 12:13:23:355LocalDateTime localDateTime5 = LocalDateTime.of(2022, 12, 12, 12, 13, 23);System.out.println("准备LocalDateTIme:"+localDateTime5);
//LocalDateTime-->LocalTimeLocalTime localTime3 = localDateTime5.toLocalTime();System.out.println("LocalDateTime-->LocalTime: "+localTime3);//LocalDateTime-->LocalDateLocalDate localDate4 = localDateTime5.toLocalDate();System.out.println("LocalDateTime-->LocalDate: "+localDate4);// LocalDate-->LocalDateTimeLocalDateTime localDateTime2 = localDate4.atStartOfDay();// 可通过localDate4.atTime()进一步设置时间
System.out.println("LocalDate-->LocalDateTime: "+localDateTime2);
// LocalDateTime-->DateZoneId zoneId=ZoneId.systemDefault();
// 方式一:
// ZonedDateTime zonedDateTime=localDateTime5.atZone(zoneId);
// Date from = Date.from(zonedDateTime.toInstant());// 方式二:Date from = Date.from(localDateTime5.toInstant(ZoneOffset.of("+8")));System.out.println("LocalDateTime-->Date: "+from);
//LocalDate-->Date,先调用 atStartOfDay() 方法转 LocalDateTime 再转 DateLocalDate localDate9 = LocalDate.now();System.out.println("准备的LocalDate是:"+localDate9);Date from2 = Date.from(localDate9.atStartOfDay().toInstant(ZoneOffset.of("+8")));System.out.println("LocalDate-->Date: "+from2);
// Date-->LocalDateTimeDate date3= new Date();
// Instant instant = date3.toInstant();
// LocalDateTime localDateTime6 = instant.atZone(ZoneId.of("+8")).toLocalDateTime();LocalDateTime localDateTime7 = date3.toInstant().atZone(ZoneId.of("+8")).toLocalDateTime();System.out.println("Date-->LocalDateTime:"+localDateTime7);
// Date-->LocalDate
LocalDate localDate5 = date3.toInstant().atZone(ZoneId.of("+8")).toLocalDate();System.out.println("Date-->LocalDate:"+localDate5);
/*** ----------------------------------------------Date,LocalDateTime,LocalDate,LocalTime之间的相互转换开始------------------------------------------------------------------*/
时间转换完整案例代码:
/**
*
* @Description 测试时间转换
* @Author moyongjun
* @Date 2022-03-27 12:38:21
* @Version 1.0
*
**/
public class TestLocalDateTimeConvert {
@Testpublic void test() {
/*** ----------------------------------------------long转时间类开始------------------------------------------------------------------*/// 1648344941916<--->"2022/3/27 09:35:41"long currentTimeTimestamp = Long.parseLong("1648344941916");
// long--->DateDate date = new Date(currentTimeTimestamp);System.out.println("long转换为Date: " + date);// long-->LocalDateTime// 毫秒级转换LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8"));System.out.println("long转换为LocalDateTime: " + localDateTime);// long-->LocalDateLocalDate localDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8")).toLocalDate();System.out.println("long转换为LocalDate: " + localDate);// long-->LocalTimeLocalTime localTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(currentTimeTimestamp), ZoneId.of("+8")).toLocalTime();System.out.println("long转换为LocalTime: " + localTime);
/*** ----------------------------------------------long转时间类结束------------------------------------------------------------------*/
/*** ----------------------------------------------String转各种时间开始------------------------------------------------------------------*/String source2 = "2022-03-23 12:45:35";// String转各种时间
// 匹配规则写法DateTimeFormatter localDateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");DateTimeFormatter localDateFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");DateTimeFormatter localDateFormatter_short = DateTimeFormatter.ofPattern("yyyy-MM-dd");DateTimeFormatter localTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");DateTimeFormatter localTimeFormatter_short = DateTimeFormatter.ofPattern("HH:mm:ss");
LocalDateTime localDateTime3 = LocalDateTime.parse("2022-03-23 12:45:35", localDateTimeFormatter);System.out.println("String格式时间转换为LocalDateTime: " + localDateTime3);
/*** String-->LocalDate* String-->LocalTime* LocalDate和LocalTime分别没有时分秒和年月日,当长公式匹配是自动舍弃对应的时分秒或年月日* 字符串是长格式yyyy-MM-dd HH:mm:ss,匹配规则也该是yyyy-MM-dd HH:mm:ss* 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-dd*/// String-->LocalDate// 字符串是长格式yyyy-MM-dd HH:mm:ss,匹配规则也该是yyyy-MM-dd HH:mm:ssLocalDate localDate2 = LocalDate.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));System.out.println("String格式时间转换为LocalDate: yyyy-MM-dd HH:mm:ss--> " + localDate2);// 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-ddLocalDate localDate_short = LocalDate.parse("2022-03-23", DateTimeFormatter.ofPattern("yyyy-MM-dd"));System.out.println("String格式时间转换为LocalDate: yyyy-MM-dd --> " + localDate_short);
// String-->LocalTime// 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-ddLocalTime localTime1 = LocalTime.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));System.out.println("String格式时间转换为LocalTime: yyyy-MM-dd HH:mm:ss --> " + localTime1);// 字符串是短格式yyyy-MM-dd,匹配规则也该是yyyy-MM-ddLocalTime localTime_short = LocalTime.parse("12:45:35", DateTimeFormatter.ofPattern("HH:mm:ss"));System.out.println("String格式时间转换为LocalTime: HH:mm:ss --> " + localTime_short);
/*** String-->Date* 方式一:用SimpleDateFormat的parse,需要处理异常,老式写法,不推荐* // 方式二:用Date的from方法,推荐此写法*/// String-->Date// 方式一:用SimpleDateFormat的parse,需要处理异常
// SimpleDateFormat simpleDateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// Date parse1 = simpleDateFormat.parse("2022-03-23 12:45:35");
// System.out.println("String格式时间转换为Date: "+parse1);
// 方式二:用Date的from方法,推荐此写法Date from1 = Date.from(LocalDateTime.parse("2022-03-23 12:45:35", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")).toInstant(ZoneOffset.of("+8")));System.out.println("String格式时间转换为Date: 用Date的from方法 " + from1);
/*** ----------------------------------------------String转各种时间结束------------------------------------------------------------------*/
/*** ----------------------------------------------时间类转String开始------------------------------------------------------------------*/// 准别一个LocalTime,14:23:58:234LocalTime localTime2 = LocalTime.of(14, 23, 58, 234);// 2022-12-12 00:00:00LocalDate localDate1 = LocalDate.of(2022, 12, 12);// 2022-12-12 12:13:23:355LocalDateTime localDateTime1 = LocalDateTime.of(2022, 12, 12, 12, 13, 23);// 当前时间Date date1 = new Date();// LocalTime-->StringString format1 = localTime2.format(DateTimeFormatter.ofPattern("HH:mm:ss:SSS"));System.out.println("14:23:58的LocalTime转换成字符串后是:" + format1);// LocalDate-->StringString format = localDate1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));System.out.println("LocalDate转String结果:" + format);// LocalDateTime-->StringString format2 = localDateTime1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss:SSS"));System.out.println("LocalDateTime转String结果:" + format2);// Date-->StringSimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");String format3 = simpleDateFormat.format(date1);System.out.println("Date转String结果:" + format3);
/*** ----------------------------------------------时间类转String结束------------------------------------------------------------------*/
/*** ----------------------------------------------时间类转时间戳开始------------------------------------------------------------------*/
/*** LocalTime无法转为时间戳*/// 2022-12-12 00:00:00LocalDate localDate3 = LocalDate.of(2022, 12, 12);// 2022-12-12 12:13:23:355LocalDateTime localDateTime4 = LocalDateTime.of(2022, 12, 12, 12, 13, 23);// 准备一个时间long currentTimeTimestamp2 = Long.parseLong("1648344941916");
// long--->DateDate date2 = new Date(currentTimeTimestamp2);System.out.println("1648344941916:long转换为Date: " + date);//'2022/3/27 09:35:41'
// LocalDate-->时间戳longlong timestamp_localDate = localDate3.atStartOfDay().toInstant(ZoneOffset.of("+8")).toEpochMilli();System.out.println("LocalDate转时间戳long结果:" + timestamp_localDate);// LocalDateTime-->时间戳longlong timestamp_localDateTime = localDateTime4.toInstant(ZoneOffset.of("+8")).toEpochMilli();System.out.println("LocalDateTime转时间戳long结果:" + timestamp_localDateTime);// Date-->时间戳longlong timestamp_Date = date2.toInstant().toEpochMilli();System.out.println("Date转时间戳long结果:" + timestamp_Date);
/*** ----------------------------------------------时间类转时间戳结束------------------------------------------------------------------*/
/*** ----------------------------------------------Date,LocalDateTime,LocalDate,LocalTime之间的相互转换开始------------------------------------------------------------------*/
/*** LocalDateTime可以通过toLocalDate()方法和toLocalTime()方法分别得到LocalDate与LocalTIme*/// 准备LocalDateTIme 2022-12-12 12:13:23:355LocalDateTime localDateTime5 = LocalDateTime.of(2022, 12, 12, 12, 13, 23);System.out.println("准备LocalDateTIme:"+localDateTime5);
//LocalDateTime-->LocalTimeLocalTime localTime3 = localDateTime5.toLocalTime();System.out.println("LocalDateTime-->LocalTime: "+localTime3);//LocalDateTime-->LocalDateLocalDate localDate4 = localDateTime5.toLocalDate();System.out.println("LocalDateTime-->LocalDate: "+localDate4);// LocalDate-->LocalDateTimeLocalDateTime localDateTime2 = localDate4.atStartOfDay();// 可通过localDate4.atTime()进一步设置时间
System.out.println("LocalDate-->LocalDateTime: "+localDateTime2);
// LocalDateTime-->DateZoneId zoneId=ZoneId.systemDefault();
// 方式一:
// ZonedDateTime zonedDateTime=localDateTime5.atZone(zoneId);
// Date from = Date.from(zonedDateTime.toInstant());// 方式二:Date from = Date.from(localDateTime5.toInstant(ZoneOffset.of("+8")));System.out.println("LocalDateTime-->Date: "+from);
//LocalDate-->Date,先调用 atStartOfDay() 方法转 LocalDateTime 再转 DateLocalDate localDate9 = LocalDate.now();System.out.println("准备的LocalDate是:"+localDate9);Date from2 = Date.from(localDate9.atStartOfDay().toInstant(ZoneOffset.of("+8")));System.out.println("LocalDate-->Date: "+from2);
// Date-->LocalDateTimeDate date3= new Date();
// Instant instant = date3.toInstant();
// LocalDateTime localDateTime6 = instant.atZone(ZoneId.of("+8")).toLocalDateTime();LocalDateTime localDateTime7 = date3.toInstant().atZone(ZoneId.of("+8")).toLocalDateTime();System.out.println("Date-->LocalDateTime:"+localDateTime7);
// Date-->LocalDate
LocalDate localDate5 = date3.toInstant().atZone(ZoneId.of("+8")).toLocalDate();System.out.println("Date-->LocalDate:"+localDate5);
/*** ----------------------------------------------Date,LocalDateTime,LocalDate,LocalTime之间的相互转换开始------------------------------------------------------------------*/
}
}
End.
java中时间的转换相关问题整理相关推荐
- java整数能强转转字符,Java中数据类型默认转换和强制类型转换
默认转换: a:由低到高一次为:(byte short char )---int ---long ---float --- double b:注意:byte short char ...
- java中对象的清除 正确的说法是_下列关于Java中垃圾回收的相关说法,正确的是()...
[简答题]审证中要审核的要点有哪些? [单选题]幼儿以积木.雪.沙土等材料为道具来模仿周围现实生活的游戏是( ) [简答题]What is the requirements & what ' ...
- Java中时间格式化(获取指定时间)
Java中时间格式化(获取指定时间,七天前) 1.通过获取当前系统时间,格式化后转为"yyyy-MM-dd HH:mm:ss"格式并输出: 2.可获取指定时间,如七天前,一年前等, ...
- 彻底解决Spring mvc中时间的转换和序列化等问题
彻底解决Spring mvc中时间的转换和序列化等问题 参考文章: (1)彻底解决Spring mvc中时间的转换和序列化等问题 (2)https://www.cnblogs.com/childkin ...
- .NET中使用Memcached的相关资源整理 转载之DUDU 程序员打杂的站长
.NET中使用Memcached的相关资源整理 Memcached官方站点:http://www.danga.com/memcached/ Memcached Win32 1.2.6下载:http:/ ...
- java中把map转换成list
private String key; private String value; //把map转换成list的公共方法 public static List map ...
- java 父类强制转换为子类_[java]Java中父类强制转换成子类的原则
Java中父类强制转换成子类的原则:父类型的引用指向的是哪个子类的实例,就能转换成哪个子类的引用. 例: public class Test { public static void main(Str ...
- java中文转简拼_如何将java中的汉字转换成简拼
有不少小伙伴们在使用java的时候会在想如何将java中的汉字转换成简拼呢?其实将java中的汉字转换成简拼是一件很简单的事情,那么下面我们就和爱站小编一起去学习学习吧. public static ...
- java中带符号十六进制转换成十进制详解
java中带符号十六进制转换成十进制详解 代码如下 代码如下 必须拿ffff进行测试,否则测不出异同 public void test1(){String strHex="ffff" ...
最新文章
- 详解:操作符的优先级
- 【算法】差分与前缀和 算法详解+例题剖析
- Oracle(order by)
- 离职 10 天,仅面了 4 家公司,我的感受。。。
- android MotionEvent中getX()和getRawX()的区别
- (计算机组成原理题目题型总结)第四章:指令系统
- 超声波机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- 开源操作系统年度技术会议图文直播
- [转载] Python ascii()函数
- python request保持连接_python接口自动化 - Requests-3 高级用法
- 线性规划的标准型与规范型 (Standard and Canonical Forms)
- 自有协议的LoRa模块应用
- 自学Shiro框架笔记
- 定时器之多层级时间轮
- 2004年11月网络工程师级试题
- APP遇到大量的真实手机号刷注册用户该如何应对?
- JWT之token机制与双token详解
- uniapp 小程序使用腾讯地图搜索位置地点,获取省、市、县地区码的方法
- C语言编程精粹读书笔记
- maven已支持支付宝开放平台SDK