关于LocalDateTime最常用方法和时间转换方式

 更新时间:2024年11月05日 08:46:29   作者:大脑补丁  
Java8版本引入了LocalDateTime和LocalDate类,极大地方便了日期和时间的处理,本文主要介绍了字符串与LocalDateTime的互转,Long型时间戳与UTC时间字符串的转换,获取今天、某天的起止时间,自定义时间的设置,以及LocalDateTime与Date的相互转换等常用方法

LocalDateTime最常用方法和时间转换

Java 8 版本以后,新增了了LocalDateTime和了LocalDate类,转换方便不亚于jodaTIme。

LocalDateTime方法有很多,本文将开发中最常用的一些时间转换列举出来,并给出转换后的示例,希望大家可以转换时参考使用。

字符串转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");系统默认时间: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());
	}

获取某天的起止时间(优雅)

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();
		// 分钟个位数置为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;
	}

根据LocalDateTime获取毫秒时间戳

	/**
	 * 根据毫秒时间戳获取LocalDateTime
	 * @param localDateTime
	 * @return
	 */
	public static long getTimestampByLocalDateTime(LocalDateTime localDateTime) {
		long timestamp = localDateTime.atZone(ZoneId.of("UTC")).toInstant().toEpochMilli();
		return timestamp;
	}

Long时间戳根据时区转为当地日期

/**
	 * 时间戳根据时区转为当地日期
	 * @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);
		// 当地时间
		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

注意:系统所在时区

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();

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java连接ftp服务器实例代码

    Java连接ftp服务器实例代码

    这篇文章主要介绍了Java连接ftp服务器实例代码 的相关资料,需要的朋友可以参考下
    2015-12-12
  • Java全面细致讲解Wrapper的使用

    Java全面细致讲解Wrapper的使用

    在封装中有一种特殊的类,能够把基本的数据类型进行转换来方便实际的使用。我们在之前提到的一些数据类型,最明显的特征是所有字母为小写状态,那么经过Wrapper的包装后,首字母就变成了大写。下面我们就这种特殊的封装类Wrapper的使用
    2022-05-05
  • Springboot创建时常用的依赖详解

    Springboot创建时常用的依赖详解

    本文介绍了Spring Boot项目中常用依赖的配置及作用,涵盖了父依赖、Web应用、测试、数据库、MyBatis、连接池、JSON处理、Lombok、AOP、校验、监控、工具包、打包配置、多配置文件以及热部署等
    2025-03-03
  • idea如何生成springboot单元测试用例

    idea如何生成springboot单元测试用例

    这篇文章主要介绍了idea生成springboot单元测试用例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-08-08
  • Maven将Jar包打入本地仓库的实现

    Maven将Jar包打入本地仓库的实现

    项目需要用到一个Jar包,不能从远程仓库拉取,只有一个Jar包,所以需要将Jar包打入到本地仓库才能引入项目,本文主要介绍了Maven将Jar包打入本地仓库的实现,感兴趣的可以了解一下
    2023-12-12
  • java中通过网卡名称获取IP地址

    java中通过网卡名称获取IP地址

    java中通过网卡名称获取IP地址,需要的朋友可以参考一下
    2013-04-04
  • Spring Boot 中的 Native SQL基本概念及使用方法

    Spring Boot 中的 Native SQL基本概念及使用方法

    在本文中,我们介绍了 Spring Boot 中的 Native SQL,以及如何使用 JdbcTemplate 和 NamedParameterJdbcTemplate 来执行自定义的 SQL 查询或更新语句,需要的朋友跟随小编一起看看吧
    2023-07-07
  • SpringMVC MVC架构与Servlet使用详解

    SpringMVC MVC架构与Servlet使用详解

    MVC设计模式一般指 MVC 框架,M(Model)指数据模型层,V(View)指视图层,C(Controller)指控制层。使用 MVC 的目的是将 M 和 V 的实现代码分离,使同一个程序可以有不同的表现形式。其中,View 的定义比较清晰,就是用户界面
    2022-10-10
  • JavaWeb仓库管理系统详解

    JavaWeb仓库管理系统详解

    这篇文章主要为大家详细介绍了JavaWeb仓库管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java实现消息轰炸的方法 附带源码

    Java实现消息轰炸的方法 附带源码

    这篇文章主要介绍了Java实现消息轰炸的方法 附带源码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04

最新评论