JAVA 8 日期工具类
JAVA 8 日期工具类
主题描述
JAVA的日期时间一直比较混乱,本来以为joda会是巅峰,但是JAVA 8改变了我的思想.但是即便在JAVA 8面前,我们还是要梳理一些自己的工具方法.
JAVA中日期时间的历史
| 所属包 | JDK版本 |
|---|---|
| java.util.Date | 1.0 |
| java.sql.Date extends Date | 1.0 |
| java.util.calendar | 1.0 |
其他的例如TimeStamp啊,SimpleDateFormat之类的就不一一列举了,如果有兴趣可以参见Single_Yam的博文: 深入理解Java常用类-----时间日期
但是即便这么多玩意,依旧不好用!终于joda站出来了
具体的可以参见它的官网信息.现在有了JAVA 8 出现了,可以看到joda的官网是的描述:
Joda-Time is the de facto standard date and time library for Java prior to Java SE 8. Users are now asked to migrate to java.time (JSR-310).
也就是说在JAVA 8 及以上,我们都不在需要joda了,少了一个库,感觉美滋滋
代码成果
下面就是基于JAVA 8 的LocalDateTime整理的工具类:
package com.hykj.sys.utils;
import java.time.Instant;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.time.temporal.TemporalAdjusters;
import java.util.Locale;
/**
* 基于 {@link java.time}的工具类
*
* @author weizj
*/
public class LocalDateTimeUtils {
/**
* 根据指定的格式来格式化一个日期<br/>
* 本方法不会返回null<br/>
* 格式化字符串中:<br/>
* <p>y 代表<b>年</b></p>
* <p>M 代表<b>月</b></p>
* <p>d 代表<b>日</b></p>
* <p>h 代表<b>十二进制的小时</b></p>
* <p>H 代表<b>二十四进制的小时</b></p>
* <p>m 代表<b>分钟</b></p>
* <p>s 代表<b>秒</b></p>
* <p>f 代表<b>毫秒</b></p>
*
* @param localDateTime 需要格式化的时间
* @param pattern 格式化
* @param locale 本地化
* @return 格式化后的字符串
*/
public static String format(LocalDateTime localDateTime, String pattern, Locale locale) {
if (localDateTime == null || pattern == null || pattern.length() == 0) {
return "";
}
return localDateTime.format(DateTimeFormatter.ofPattern(pattern, locale));
}
/**
* 根据指定的格式来格式化一个日期<br/>
* 本方法不会返回null<br/>
* 格式化字符串中:<br/>
* <p>y 代表<b>年</b></p>
* <p>m 代表<b>月</b></p>
* <p>d 代表<b>日</b></p>
* <p>h 代表<b>十二进制的小时</b></p>
* <p>H 代表<b>二十四进制的小时</b></p>
* <p>M 代表<b>分钟</b></p>
* <p>s 代表<b>秒</b></p>
* <p>f 代表<b>毫秒</b></p>
*
* @param localDateTime 需要格式化的时间
* @param pattern 格式化
* @return 格式化后的字符串
*/
public static String format(LocalDateTime localDateTime, String pattern) {
return format(localDateTime, pattern, Locale.getDefault());
}
/**
* 把日期格式化为"yyyy-MM-dd"的字符串
*
* @param localDateTime 需要格式化的日期
* @return "yyyy-MM-dd"样式的字符串
*/
public static String formatDate(LocalDateTime localDateTime) {
return format(localDateTime, "yyyy-MM-dd");
}
/**
* 把日期格式化为"yyyy-MM-dd HH:mm:ss"的字符串
*
* @param localDateTime 需要格式化的日期
* @return "yyyy-MM-dd HH:mm:ss"样式的字符串
*/
public static String formatDateTime(LocalDateTime localDateTime) {
return format(localDateTime, "yyyy-MM-dd HH:mm:ss");
}
/**
* 把日期格式化为"HH:mm:ss"的字符串
*
* @param localDateTime 需要格式化的日期
* @return "HH:mm:ss"样式的字符串
*/
public static String formatTime(LocalDateTime localDateTime) {
return format(localDateTime, "HH:mm:ss");
}
/**
* 把其他类型转换为{@link java.time.LocalDateTime}类型<br/>
* 本方法不会返回null,<b>当入参不在以下支持的类型列表中,会采用toString()准换为字符串后提供支持</b><br/>
* 本方法支持以下类型<br/>
* {@link java.sql.Date}<br/>
* {@link java.util.Date}<br/>
* {@link java.sql.Timestamp}<br/>
* {@link java.lang.String}<br/>
* 毫秒数的{@link java.lang.Long}<br/>
*
* @param obj 需要转换为LocalDateTime的对象
* @return LocalDateTime对象
*/
public static LocalDateTime parseToLocalDateTime(Object obj) {
if (obj == null) {
return LocalDateTime.now();
}
if (obj instanceof java.util.Date) {
return ((java.util.Date) obj).toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime();
}
if (obj instanceof String) {
return LocalDateTime.parse((String) obj);
}
if (obj instanceof java.lang.Long) {
return LocalDateTime.ofInstant(Instant.ofEpochMilli((long) obj), ZoneId.systemDefault());
}
return parseToLocalDateTime(obj.toString());
}
/**
* 获取到毫秒的时间戳
*
* @param localDateTime 时间
* @return 毫秒的时间戳
*/
public static long toMilli(LocalDateTime localDateTime) {
return localDateTime.toInstant(ZoneOffset.of(ZoneOffset.systemDefault().getId())).toEpochMilli();
}
/**
* 获取到秒的时间戳
*
* @param localDateTime 时间
* @return 秒的时间戳
*/
public static long toSecond(LocalDateTime localDateTime) {
return localDateTime.toInstant(ZoneOffset.of(ZoneOffset.systemDefault().getId())).getEpochSecond();
}
/**
* 获取月初
*
* @param localDateTime 日期时间
* @return 指定日期的月初
*/
public static LocalDateTime getMonthHeader(LocalDateTime localDateTime) {
return localDateTime.with(TemporalAdjusters.firstDayOfMonth());
}
public static LocalDateTime getLastofMonth(LocalDateTime localDateTime) {
return localDateTime.with(TemporalAdjusters.lastDayOfMonth());
}
}
JAVA 8 日期工具类的更多相关文章
- Java案例——日期工具类
需求:定义一个日期工具类,包含两个方法,按日期转化成指定格式的字符串,把字符串解析为指定格式的日期 然后定义一个测试类测试 分析: 1.定义一个日期工具类 2.定义一个方法dateToString,用 ...
- java DateTimeUtil 日期工具类
package com.sicdt.library.core.utils; import java.sql.Timestamp; import java.text.DateFormat; import ...
- Java的日期工具类
package com.tech.jin.util; import java.text.DateFormat; import java.text.ParseException; import java ...
- java 常用日期工具类的操作
获取指定日期的时间戳 /* * 获取指定日期的时间戳 * */ public static long getMillis(String date_str){ try { SimpleDateForma ...
- 日期工具类 - DateUtil.java
日期工具类,提供对日期的格式化和转换方法.获取区间日期.指定日期.每月最后一天等. 源码如下:(点击下载 -DateUtil.java.commons-lang-2.6.jar ) import ja ...
- Java基础知识强化92:日期工具类的编写和测试案例
1. DateUtil.java,代码如下: package cn.itcast_04; import java.text.ParseException; import java.text.Simpl ...
- Java日期工具类,Java时间工具类,Java时间格式化
Java日期工具类,Java时间工具类,Java时间格式化 >>>>>>>>>>>>>>>>>&g ...
- java 日期工具类DateUtils
日期工具类DateUtils CreateTime--2017年5月27日08:48:00Author:Marydon DateUtils.java-对日期类的进一步封装 import java. ...
- java日期工具类DateUtil-续一
上篇文章中,我为大家分享了下DateUtil第一版源码,但就如同文章中所说,我发现了还存在不完善的地方,所以我又做了优化和扩展. 更新日志: 1.修正当字符串日期风格为MM-dd或yyyy-MM时,若 ...
随机推荐
- 可视化svg深入理解viewport、viewbox、preserveaspectradio
直接运行此例子 深入理解svg的viewport.viewbox.preserveaspectradio实例 <!DOCTYPE html> <html lang="en& ...
- Windows下pip 离线包安装
pip在线安装十分方便,有时候某些服务器并没有直接联网,需要下载好安装包上传到服务器上进行安装,不经常用,还是有点小麻烦的. 安装Python之后,将下载好的安装包包放在Python安装的根目录下使用 ...
- spring mvc 框架校验常用注解
@AssertFalse 被注解的元素必须为false@AssertTrue 被注解的元素必须为false@DecimalMax(value) 被注解的元素必须为一个数字,其值必须小于等于指定的最小值 ...
- Mha-Atlas-MySQL高可用方案实践(二)
六,配置VIP漂移 主机名 IP地址(NAT) 漂移VIP 描述 mysql-db01 eth0:192.168.0.51 VIP:192.168.0.60 系统:CentOS6.5(6.x都可以) ...
- JASPER打印单据,标签开发培训, 界面开发培训
JASPER打印单据,标签开发培训软件:TIBC JASPER Studio.Jaspersoft Studio是一个专为JasperReports报表引擎而开发的报表设计器,是 iReport设计器 ...
- Window上编译最新版libCef(Branch 2704)(转载)
转自http://blog.csdn.net/mfcing/article/details/52066579 1.开发环境搭建 VS2010及以上版本,CMake 2.8.12.1及以上版本.我安 ...
- About Feature Scaling and Normalization
在进行数据处理之前,一定要想一想,你的算法是用来做什么,这样才能选择如何对数据进行预处理. 参考网站: http://sebastianraschka.com/Articles/2014_about_ ...
- sublime安装PackageControl提示失败(被墙了)
An error occurred installing Package Control 然后下面又说visit....某网址 如果弹出这个错误的话,就是被墙了.翻个墙或者改hosts就行了 如果是改 ...
- 微信小程序记账本进度七
最后大体上完成了,但是好像少了点功能,整体并不是特别华丽
- netty服务器端启动
package com.imooc.netty.ch3; import com.imooc.netty.ch6.AuthHandler; import io.netty.bootstrap.Serve ...