java 之 各类日期格式转换

一、前言

大家在开发过程中必不可少得和日期打交道,对接别的系统时,时间日期格式不一致,每次都要转换!
从 Java1 到 Java8 将近 20 年,再加上 Java8 的普及时间、各种历史 API 兼容过渡时间。我们很多时候需要在旧时间 API 与新时间 API 之间切换,并行使用!!!
每次写完就忘记了,小编专门来整理一篇来详细说一下他们转换的方法,方便后面使用!!

二、日期格式转换

LocalDateTime 和 Date 互相转换

Date 转 LocalDateTime

Java8 发行的时候,也考虑到了新旧 API 之间的转换,所以在java.util.Date中增加了toInstance()方法,可以得到一个Instance实例。Instance没有时区概念,所以我们需要通过atZone()指定时区,得到ZonedDateTime实例,然后转换为java.time.LocalDate

如下:

Date dateNow = new Date();
LocalDateTime localDateTime = dateNow.toInstant()
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime()

同样的,我们也可以借助Instance的ofEpochMilli()方法创建实例。如下:

Date dateNow = new Date();
LocalDateTime localDateTime = Instant.ofEpochMilli(dateNow.getTime())
                .atZone(ZoneId.systemDefault())
                .toLocalDateTime()
}

Date转LocalDate、LocalTime的原理同上。
java.util.Date是包含年月日时分秒的,转为java.time.LocalDateTime是精度保留,转为java.time.LocalDate是把时分秒去掉,转换方式完全一样,只不过要用到的是toLocalDate()方法和toLocalTime()方法。

LocalDateTime 转 Date

同理,可得LocalDate、LocalTime转Date的方法。

LocalDateTime localDateTime = LocalDateTime.now()
Date date = Date.from(localDateTime.atZone(ZoneId.systemDefault()).toInstant());

LocalDateTime 和 String 互相转换

LocalDateTime 转 String

LocalDate类有一个format()方法,可以将日期转成字符串。format()方法需要一个DateTimeFormatter对象作为参数。

DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
String dateTimeStr = LocalDateTime.now().format(dateTimeFormatter);

String 转 LocalDateTime

我们可以使用parse()方法从字符串中解析日期对象

String dateTimeStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr);

LocalDateTime 和 Instant 互相转换

LocalDateTime表示没有时区的日期时间,如2019-10-25T12:15:30,而Instant是时间线上的一个瞬时点。

LocalDateTime 转 Instant

LocalDateTime localDateTime = LocalDateTime.now();

Instant instant;
//第一种方式:Using LocalDateTime.toInstant()
instant = localDateTime.toInstant(ZoneOffset.UTC);

//第二种方式:Using LocalDateTime.atZone() and Instant.atZone()
instant =localDateTime.atZone(ZoneId.systemDefault()).toInstant();

//第三种方式:Using LocalDateTime.toEpochSecond() and Instant.ofEpochSecond()
long timeInSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC);
instant = Instant.ofEpochSecond(timeInSeconds);

Instant 转 LocalDateTime

//Using LocalDateTime.ofInstant
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault());

long timeInSeconds = 1567109422L;
localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timeInSeconds), ZoneId.systemDefault());

localDateTime = LocalDateTime.ofInstant(Instant.ofEpochSecond(timeInSeconds, 0), ZoneId.systemDefault());

long timeInMillis = 1567109422123L;
localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timeInMillis), ZoneId.systemDefault());

//Using Timestamp
localDateTime = Timestamp.from(Instant.now()).toLocalDateTime(); 

Date 和 String 互相转换

Date 转 String

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
String dateStr = df.format(now);

String 转 Date

DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
String dateStr = df.format(now);
Date date = df.parse(dateStr);
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我了解了您的要求。关于您的问题,字符串和时间格式的转换是编程中常见的操作,各种编程语言都提供了相应的函数和库来进行处理。以下是一些常见的语言中实现字符串和时间格式转换的函数和方法: 1. Python 字符串转时间格式: ```python import datetime str_time = '2022-01-01 12:00:00' time_obj = datetime.datetime.strptime(str_time, '%Y-%m-%d %H:%M:%S') ``` 时间格式转字符串: ```python time_obj = datetime.datetime.now() str_time = time_obj.strftime('%Y-%m-%d %H:%M:%S') ``` 2. Java 字符串转时间格式: ```java import java.text.SimpleDateFormat; import java.util.Date; String str_time = "2022-01-01 12:00:00"; SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date time_obj = formatter.parse(str_time); ``` 时间格式转字符串: ```java Date time_obj = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str_time = formatter.format(time_obj); ``` 3. C++ 字符串转时间格式: ```cpp #include <iostream> #include <ctime> #include <string> std::string str_time = "2022-01-01 12:00:00"; struct tm time_obj; strptime(str_time.c_str(), "%Y-%m-%d %H:%M:%S", &time_obj); time_t timestamp = mktime(&time_obj); ``` 时间格式转字符串: ```cpp time_t timestamp = time(NULL); struct tm time_obj = *localtime(&timestamp); char str_time[20]; strftime(str_time, sizeof(str_time), "%Y-%m-%d %H:%M:%S", &time_obj); std::string result(str_time); ``` 以上是常见的几种语言中实现字符串和时间格式转换的方式,具体的实现方法可能会有所不同,但大致思路是相似的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值