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.Datejava.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.Datejava.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日期格式问题的更多相关文章

  1. Java基础/时间日期格式

    Java时间日期格式转换 一.Date转String和String转Date 参考博客:https://www.cnblogs.com/sharpest/p/7879377.html public s ...

  2. Java基础-Java数据类型

    Java基础-Java数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...

  3. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  4. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  5. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

  6. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  7. Java基础-Java中的并法库之线程池技术

    Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.

  8. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  9. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  10. java基础22 日期类、日历类、日期格式类

    package com.dhb.code; import java.text.ParseException; import java.text.SimpleDateFormat; import jav ...

随机推荐

  1. 端口被占用(启动tomcat时 错误: 代理抛出异常 : java.rmi.server.ExportException: Port already in use: 1099的解决办法)

    一.问题描述 在IntelliJ IDEA 中启动Tomcat服务器时就出现了如下图所示的错误: 错误: 代理抛出异常错误**: java.rmi.server.ExportException: Po ...

  2. TypeScript 泛型及应用

    TypeScript 泛型及应用 一.泛型是什么 二.泛型接口 三.泛型类 四.泛型约束 4.1 确保属性存在 4.2 检查对象上的键是否存在 五.泛型参数默认类型 六.泛型条件类型 七.泛型工具类型 ...

  3. RDD的详解、创建及其操作

    RDD的详解 RDD:弹性分布式数据集,是Spark中最基本的数据抽象,用来表示分布式集合,支持分布式操作! RDD的创建 RDD中的数据可以来源于2个地方:本地集合或外部数据源 RDD操作 分类 转 ...

  4. flower 指定app

    flower 指定app # tasks.py from celery import Celery celery = Celery(broker="amqp://", backen ...

  5. 准备 dubbo 学习目录

    1. dubbo 背景及原理2. dubbo 架构分析4. dubbo 设计模式分析5. dubbo 实战使用6. dubbo 优化

  6. thin_check命令 man手册

    # man thin_checkthin_check 检查验证设备或文件的精简配置元数据.thin_check checks thin provisioning metadata created by ...

  7. [spojQTREE7]Query on a tree VII

    即QTREE5和QTREE6组合,即将原本维护子树范围内点数改为维护子树范围内最小值即可,由于最小值没有可减性,因此需要使用set (虽然形式上与QTREE5类似,但QTREE5维护的信息更巧妙一些, ...

  8. [bzoj3329]Xorque

    首先将问题转化为2x^x=3x,那么相当于让x右移一位和原数的1不相交,即不含有相邻的1,第一个问题可以直接数位dp,第二个问题可以类似dp+矩乘优化即可 1 #include<bits/std ...

  9. [uoj576]服务调度

    先考虑一个子问题:仅有一个询问且无修改 对每一种颜色的贡献分类讨论,结论:最远的点一定这些点集中(任意一组)最远点对中的两个点(选择较远的一个) 证明:设$dis(x,y)$为$x$到$y$的距离,$ ...

  10. [cf1285F]Classical

    先枚举$d=\gcd$,然后暴力枚举所有$d$的倍数,相当于求出若干个数中最大的互素对 假设选出的数依从大到小排序后为$a_{i}$,令$g_{i}=\min_{(a_{i},a_{j})=1}j$, ...