【Java 基础】Java日期格式问题
1. Use SimpleDateFormat
to format Date.
Watch out, SDF is NOT THREAD-SAFE, it might not be important but keep that in mind.
/**
* 时间格式(yyyy-MM-dd)
*/
public static final String DATE_PATTERN = "yyyy-MM-dd";
public static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern(DATE_PATTERN);
/**
* 时间格式(yyyy-MM-dd HH:mm:ss)
*/
public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern(DATE_TIME_PATTERN);
String to Date
public static String getStringByDate(Date date) {
SimpleDateFormat format = new SimpleDateFormat(DATE_PATTERN); //DateFormat
Date date = null;
try {
// Fri Feb 24 00:00:00 CST 2012
date = format.parse(str);
} catch (ParseException e) {
e.printStackTrace();
}
}
Date to String
private static String dateToString(Date dt, String dateFormate)
{
DateFormat dFormat = new SimpleDateFormat(dateFormate);//DATE_PATTERN
return dFormat.format(dt);
}
2. Use DateTimeFormatter
to format Date
It is true however that DateTimeFormatters
are thread-safe and hence will have one instantiation more per call.
/**
* 默认 zoneId
*/
private static final ZoneId DEFAULT_ZONE_ID = TimeZone.getTimeZone("GMT+8").toZoneId();
Date date = new Date();//System time
LocalDate ldate = LocalDate.from(date.toInstant().atZone(DEFAULT_ZONE_ID));
String s = DateTimeFormatter.ISO_DATE.format(ldate); // uuuu-MM-dd
String to Date
public static Date getDateByStringHms(String st) {
LocalDateTime localDateTime=LocalDateTime.parse(st, Constant.DATE_TIME_FORMATTER);
Instant instant = localDateTime.atZone(DEFAULT_ZONE_ID).toInstant();
return Date.from(instant);
}
Date to String
public static String getStringByDate(Date date) {
Instant instant = date.toInstant();
LocalDate localDate = instant.atZone(DEFAULT_ZONE_ID).toLocalDate();
return localDate.format(Constant.DATE_FORMATTER);
}
格式问题
使用上诉方法,譬如:
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, 1);
Date date = cal.getTime();
SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");
String date1 = format1.format(date);
Date inActiveDate = null;
try {
inActiveDate = format1.parse(date1);
} catch (ParseException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
如果直接使用inActiveDate.toString
将产生inActiveDate = Wed Sep 26 00:00:00 IST 2019
这种格式的数据。如果需要与数据库交互,需要的是2019-09-26
, 这个时候就得使用 JDBC中扩展的3个类:
java.sql.Date,
java.sql.Time,
java.sql.Timestamp
String to Date
public static Date getDateByStringHms(String lstr_sysdate)
{
Date utilDate = localDateTimeToDate(LocalDateTime.parse(lstr_sysdate, Constant.DATE_TIME_FORMATTER));
return new java.sql.Timestamp(utilDate.getTime());
}
然后再取.subString(0,19)
未知类型(可以是java.util.Date
或java.sql.Date
)转换为String
如果已知输入变量是java.sql.Date
,那么可以简单地转换它并调用toLocalDate()
方法:
LocalDate date = ((java.sql.Date) input).toLocalDate();
不幸的是,你不能在java.sql.Date
上调用toInstant()
,因为according to javadoc,它总是抛出UnsupportedOperationException. 此时可以有两种解决方案
使用getTime()
如果不知道类型(可以是java.util.Date
或java.sql.Date
),可以使用·getTime()·方法返回的值来构建Instant,然后将其转换为时区(下面我使用的是JVM的默认值),最后从中获取本地日期:
LocalDate date = Instant
// get the millis value to build the Instant
.ofEpochMilli(input.getTime())
// convert to JVM default timezone
.atZone(ZoneId.systemDefault())
// convert to LocalDate
.toLocalDate();
toLocalDate()
方法获取日期部分(日/月/年),忽略其余部分,因此无需截断它:如果时间是午夜,上午10点或当天的任何其他时间都无关紧要,toLocalDate()
将忽略它并获得日期部分.
但是,如果真的想将时间设置为午夜,则可以使用with
method并将LocalTime
传递给它:
LocalDate date = Instant
// get the millis value to build the Instant
.ofEpochMilli(input.getTime())
// convert to JVM default timezone
.atZone(ZoneId.systemDefault())
// set time to midnight
.with(LocalTime.MIDNIGHT)
// convert to LocalDate
.toLocalDate();
但toLocalDate()
方法将忽略时间部分,因此在这种情况下不需要设置时间(LocalDate
将是相同的).
检查日期的类型并相应地选择相应的操作
if (input instanceof java.sql.Date) {
date = ((java.sql.Date) input).toLocalDate();
} else {
date = input.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
}
【Java 基础】Java日期格式问题的更多相关文章
- Java基础/时间日期格式
Java时间日期格式转换 一.Date转String和String转Date 参考博客:https://www.cnblogs.com/sharpest/p/7879377.html public s ...
- Java基础-Java数据类型
Java基础-Java数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...
- java基础---->java中正则表达式二
跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...
- Java基础-Java中的堆内存和离堆内存机制
Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-Java中的内存分配与回收机制
Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.
- Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)
Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...
- Java基础-Java中的并法库之线程池技术
Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.
- Java基础-Java中23种设计模式之常用的设计模式
Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...
- Java基础-JAVA中常见的数据结构介绍
Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...
- java基础22 日期类、日历类、日期格式类
package com.dhb.code; import java.text.ParseException; import java.text.SimpleDateFormat; import jav ...
随机推荐
- 深入理解Spring IOC容器
本文将从纯xml模式.xml和注解结合.纯注解的方式讲解Spring IOC容器的配置和相关应用. 纯XML模式 实例化Bean的三种方式: 使用无参构造函数 默认情况下,会使用反射调用无参构造函数来 ...
- 说下我费了几个钟头才搞定的myeclipse和tomcat问题
配置myeclipse与tomcat的时候,我根本没有想到myeclipse已经集成了tomcat,根据我上篇文章可以找到所集成的tomcat的位置.于是,自己下了一个tomcat,也许是自作聪明吧, ...
- [bzoj1122]账本
简化问题:如果没有2操作,答案是多少贪心:修改-一定修改最前面的,修改+一定修改最后面的,正确性显然而通过1操作,要完成两步:1.让最终结果为q:2.让前缀和非负,通过贪心可以获得最小值(具体来说,假 ...
- 智能 Request 推荐,K8s 资源利用率提升 252%
作者 王孝威,FinOps 认证从业者,腾讯云容器服务产品经理,热衷于为客户提供高效的 Kubernetes 使用方式,为客户极致降本增效服务. 余宇飞,FinOps 认证从业者,腾讯云专家工程师,从 ...
- 小白秒懂的Windows下搭建基于pytorch的深度学习环境
配置环境总体思路 1.依据python版本选择对应Anaconda版本: 2.依据显卡驱动版本选择对应的CUDA版本: 3.依据CUDA版本选择对应的cudnn和pytorch版本. 一.Anacon ...
- 数值分析:幂迭代和PageRank算法(Numpy实现)
1. 幂迭代算法(简称幂法) (1) 占优特征值和占优特征向量 已知方阵\(\bm{A} \in \R^{n \times n}\), \(\bm{A}\)的占优特征值是比\(\bm{A}\)的其他特 ...
- 洛谷 P6072 -『MdOI R1』Path(回滚莫队+01-trie)
题面传送门 又是 ix35 神仙出的题,先以 mol 为敬 %%% 首先预处理出根节点到每个点路径上权值的异或和 \(dis_i\),那么两点 \(a,b\) 路径上权值的异或和显然为 \(dis_a ...
- Codeforces 1299D - Around the World(线性基+图论+dp)
Codeforces 题目传送门 & 洛谷题目传送门 一道线性基的综合题 %%%%%% 首先注意到"非简单路径""异或和"等字眼,可以本能地想到线性基. ...
- R同时保存png/pdf等格式图片
R怎么同时保存png/pdf等多种格式的图片? 如果是ggplot对象,用ggsave用两下就行,如果不是呢? png/pdf()组合dev.off()是通常保存方法,但一个组合只能保存一个图片.要想 ...
- 学习java的第七天
一.今日收获 1.看完全学习手册上java关键字与标识符两节 2.了解了java的关键字与标识符 二.今日难题 1.基本都理解 三.明日目标 1.继续看完全学习手册上的内容 2.加油!