關于LocalDateTime最常用方法和時間轉換方式
更新時間:2024年11月05日 08:46:29 作者:大腦補丁
Java8版本引入了LocalDateTime和LocalDate類,極大地方便了日期和時間的處理,本文主要介紹了字符串與LocalDateTime的互轉,Long型時間戳與UTC時間字符串的轉換,獲取今天、某天的起止時間,自定義時間的設置,以及LocalDateTime與Date的相互轉換等常用方法
LocalDateTime最常用方法和時間轉換
Java 8 版本以后,新增了了LocalDateTime和了LocalDate類,轉換方便不亞于jodaTIme。
LocalDateTime方法有很多,本文將開發(fā)中最常用的一些時間轉換列舉出來,并給出轉換后的示例,希望大家可以轉換時參考使用。
字符串轉LocalDateTime
public static LocalDateTime parseStringToDateTime(String time, String format) {
DateTimeFormatter df = DateTimeFormatter.ofPattern(format);
return LocalDateTime.parse(time, df);
}LocalDateTime轉字符串
public static String getDateTimeToString(LocalDateTime localDateTime, String format) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
return localDateTime.format(formatter);
}測試:
若毫秒位不為000則顯示毫秒
String utc = getUTCMillisecondFromTimestamp(1539718265123); System.out.println(utc); 輸出:2018-10-16T19:31:05.123Z
若毫秒為000則不顯示毫秒,
String utc = getUTCMillisecondFromTimestamp(1539718265000); System.out.println(utc); 輸出:2018-10-16T19:31:05Z
Long型時間戳(15位)轉UTC時間字符串
/**
* 將UTC時間戳轉為UTC字符串(精確到秒)
*
* @param timestamp
* @return
*/
public static String getUTCStrFromTimestamp(long timestamp) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
// 北京時間:ZoneId.of("UTC+8");系統(tǒng)默認時間:ZoneId.systemDefault()
LocalDateTime localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(timestamp), ZoneId.of("UTC"));
String utc = localDateTime.format(formatter);
return utc;
}測試:
String utc = getUTCStrFromTimestamp(1539718265123); System.out.println(utc); 輸出:2018-10-16T19:31:05Z
Long型時間戳(15位)轉UTC時間字符串
/**
* 將時間戳轉為UTC字符串(若毫秒為000則不顯示毫秒,若毫秒位不為000則顯示毫秒)
*
* 返回格式:2018-10-16T19:31:05.123Z
*
* @param timestamp
* @return
*/
public static String getUTCMillisecondFromTimestamp(long timestamp) {
Instant instant = Instant.ofEpochMilli(timestamp);
String utcString = instant.toString();
return utcString;
}獲取今天的起止時間
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
String startTime = LocalDateTime.now().withHour(0).withMinute(0).withSecond(0).withNano(0).format(formatter);
String endTime = LocalDateTime.now().withHour(23).withMinute(59).withSecond(59).withNano(999_999_999).format(formatter);返回目標月份的最后一天
/**
* 返回目標月份的最后一天
*
* @param sourceDate 目標月份
* @param monthOffset 月份偏移量
* @return
*/
private LocalDate getLastDateOfMonth(LocalDate sourceDate, int monthOffset) {
return sourceDate.plusMonths(monthOffset).with(TemporalAdjusters.lastDayOfMonth());
}獲取某天的起止時間(優(yōu)雅)
LocalDate date = LocalDate.of(2021, 4, 20); LocalDateTime startTime = LocalDateTime.of(date, LocalTime.MIN); LocalDateTime endTime = LocalDateTime.of(date, LocalTime.MAX);
LocalDateTime設置自定義時間
/**
* 獲得一個(毫秒)時間戳的十分鐘起始時間戳
*
* 如:輸入1534930875000(2018-08-22 17:41:15)的時間戳返回1534930800000(2018-08-22 17:40:00)的時間戳
*
* @param timestrap
*
*
* @return
*/
public static long getTenMinuteStartTimestrap(long timestamp) {
LocalDateTime localDateTime = getLocalDateTimeByTimestamp(timestamp);
int minute = localDateTime.getMinute();
// 分鐘個位數(shù)置為0
int minute_floor = minute / 10 * 10;
LocalDateTime startLocalDateTime = localDateTime.withMinute(minute_floor).withSecond(0).withNano(0);
long startTimestamp = getTimestampByLocalDateTime(startLocalDateTime);
return startTimestamp;
}Long毫秒時間戳轉LocalDateTime
/**
* Long毫秒時間戳轉LocalDateTime
*/
public static LocalDateTime getLocalDateTimeByTimestamp(long timestamp) {
Instant instant = Instant.ofEpochMilli(timestamp);
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
return localDateTime;
}根據(jù)LocalDateTime獲取毫秒時間戳
/**
* 根據(jù)毫秒時間戳獲取LocalDateTime
* @param localDateTime
* @return
*/
public static long getTimestampByLocalDateTime(LocalDateTime localDateTime) {
long timestamp = localDateTime.atZone(ZoneId.of("UTC")).toInstant().toEpochMilli();
return timestamp;
}Long時間戳根據(jù)時區(qū)轉為當?shù)厝掌?/h3>
/**
* 時間戳根據(jù)時區(qū)轉為當?shù)厝掌?
* @param timestamp
* @param timezone
* @return
*/
public static Date getLocalDateByTimezone(long timestamp, int timezone) {
Instant instant = Instant.ofEpochMilli(timestamp);
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
// 當?shù)貢r間
LocalDateTime localDate = localDateTime.plusHours(timezone);
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
String localDateTimeStr = df.format(localDate);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Date date = null;
try {
date = sdf.parse(localDateTimeStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
/**
* 時間戳根據(jù)時區(qū)轉為當?shù)厝掌?
* @param timestamp
* @param timezone
* @return
*/
public static Date getLocalDateByTimezone(long timestamp, int timezone) {
Instant instant = Instant.ofEpochMilli(timestamp);
LocalDateTime localDateTime = LocalDateTime.ofInstant(instant, ZoneOffset.UTC);
// 當?shù)貢r間
LocalDateTime localDate = localDateTime.plusHours(timezone);
DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss'Z'");
String localDateTimeStr = df.format(localDate);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
Date date = null;
try {
date = sdf.parse(localDateTimeStr);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}LocalDateTime轉Date
注意:系統(tǒng)所在時區(qū)
Date date = Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant());
Date轉LocalDateTime
Date todayDate = new Date();
LocalDateTime ldt = todayDate.toInstant()
.atZone( ZoneId.systemDefault() )
.toLocalDateTime();毫秒轉秒(時間戳)
long second = Instant.ofEpochMilli(1636338645000L).getEpochSecond();
秒轉毫秒(時間戳)
long second = Instant.ofEpochSecond(1636338645L).toEpochMilli();
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
java 實現(xiàn)發(fā)短信功能---騰訊云短信
如今發(fā)短信功能已經(jīng)成為互聯(lián)網(wǎng)公司的標配,接下來通過本文給大家介紹java 實現(xiàn)發(fā)短信功能---騰訊云短信 ,需要的朋友可以參考下2019-08-08
Java異常--常見方法--自定義異常--增強try(try-with-resources)詳解
這篇文章主要介紹了Java異常--常見方法--自定義異常--增強try(try-with-resources)的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
詳解Java Callable接口實現(xiàn)多線程的方式
這篇文章主要介紹了詳解Java Callable接口實現(xiàn)多線程的方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-04-04
Kotlin Coroutines執(zhí)行異步加載示例詳解
這篇文章主要給大家介紹了關于Kotlin Coroutines執(zhí)行異步加載的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。2018-01-01

