关于java时间类型和格式化到微秒问题
常规的问题此处略,因为网络上到处都是,这里主要讨论三个问题:
1.数据库的时间戳类型(含微秒)对应java的什么类型
java的常见时间类型比较多:
- java.util.Date
- java.sql.Date
- java.sql.Timestamp
- java.util.Calendar
- java.time.LocalDate
- java.time.LocalTime
- java.time.LocalDateTime
- java.time.Instant
除了这些,还有许多不常用的java.time类型,例如Year,Month。
以上列出的类型中,只有红色部分可以精确到微秒。
我们常用的Date,Calendar并不能精确到微秒。
所以为了能够显示数据库中微秒,在使用mybatis的时候,需要把字段类型映射为java.sql.Timestamp。
当然也可以映射为其它类型,例如LocalDateTime,Instant,不过需要自己添加mybatis的typeHandler,以便把类型转为适当的类型。
2.java.sql.Timestamp到底是不是包含了微秒
看具体情况,这是因为Timestamp本身有多个初始化方式:
public Timestamp(int year, int month, int date,int hour, int minute, int second, int nano) -- 可以到微秒,但是从jdk1.8就被标注为过时,这是因为有异常风险
public Timestamp(long time) time是毫秒,不支持微秒
public void setTime(long time) time是毫秒,不支持微秒
public static Timestamp valueOf(String s) -- 可以支持微秒,但对s有格式要求
public static Timestamp valueOf(LocalDateTime dateTime) --可以支持微秒
public static Timestamp from(Instant instant) -- 可以支持微秒,这是因为Instant类型支持到纳秒
3.如何格式java的时间类型到微秒
使用SimpleDateFormat是无法格式化到微秒的,所以网络上说SimpleDateFormat格式化到微秒,那是错误的。
只能使用java.time.format.DateTimeFormatter才可以格式化出微秒
以下示例如何创建一个包含纳秒的时间,并格式化输出:
/**
* 格式化到微秒,必须配合 DateTimeFormatter
* @param time
* @return
*/
private String formatTo(Timestamp time) {
String format="yyyy/MM/dd HH:mm:ss.SSSSSS";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format);
LocalDateTime now=LocalDateTime.ofInstant(time.toInstant(), ZoneId.systemDefault());
return now.format(formatter);
//SimpleDateFormat form=new SimpleDateFormat(format);
//return form.format(time);
} public static void main(String[] args) {
TestTimestamp t=new TestTimestamp();
Timestamp ts2=Timestamp.valueOf("2024-02-04 12:39:45.898777");
System.out.println(t.formatTo(ts2));
}
关于java时间类型和格式化到微秒问题的更多相关文章
- Java浮点类型的格式化
概述 基于Java,介绍将浮点类型小数进行格式化的方案. 正文 在Java中,用于格式化小数的类是java.text.DecimalFormat,比如你可以这样使用: double data = 33 ...
- java时间类型操作
java中Date类型与字符串相互转化 Date date = new Date(); System.out.println(date); //DateFormat类为一个 ...
- java时间类型的转换/获取当前时间/将时间转换成String/将String转换成时间
对于我的脑子,我已经服气了...写了N遍的东西,就是记不住...既然记不住那就记下来... 利用java获取当前的时间(String类型,年-月-日 时:分:秒) //我要获取当前的日期 Date d ...
- EL表达式获取日期时间类型后格式化的问题
最近在项目中遇到的问题,就是从后台取到的java.util.Date类型的数据,在前台需要格式化的问题. 开始想了很多办法,其实在JSP页面中处理很简单,JSTL提供的format标签即可解决这个问题 ...
- SpringBoot2 时间类型自动格式化 自动转换
package com.archibladwitwicke.springboot2.chapter03.configurer; import com.archibladwitwicke.springb ...
- Java时间转换类实现
Java时间类型非常的差,首先版本问题,本人使用java在Android平台开发.很多Data类的方法已经不提倡使用,一个时间,居然要使用Calendar.DateFormat等类共同编码,非常麻烦. ...
- MySql与对应的Java的时间类型
MySql的时间类型有 Java中与之对应的时间类型date java.sql.Date Date ...
- java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
转载地址:http://www.devba.com/index.php/archives/4581.html java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明); ...
- (转)java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明)
java向MySQL插入当前时间的四种方式和java时间日期格式化的几种方法(案例说明);部分资料参考网络资源 1. java向MySQL插入当前时间的四种方式 第一种:将java.util.Date ...
- Java 之 JDK 1.8 新增日期时间类型
一.原来的日期时间 Java1.0中包含了一个Date类,但是它的大多数方法已经在Java 1.1引入Calendar类之后被弃用了.而Calendar并不比Date好多少.它们面临的问题是: ① 可 ...
随机推荐
- dotnet 使用 NamedPipeClientStream 连接一个不存在管道服务名将不断空跑 CPU 资源
本文记录一个开发和代码审查过程中,需要关注的细节.在 dotnet 里,在 .NET 6 和以下版本,包括 .NET Framework 版本,使用 NamedPipeClientStream 进行连 ...
- 简化 Python 日志管理:Loguru 入门指南
简化 Python 日志管理:Loguru 入门指南 在开发和维护软件项目时,高效的日志管理系统对于监控应用程序的行为.调试代码和追踪异常至关重要.Python 的标准日志模块虽然功能强大,但其配置和 ...
- python 简明笔记
python 简明笔记 基础内置类型 数值类型 字面量 3.14e-10 3.14E-10 3.14e+10 #八进制 0o123 #十六进制 0xabf #二进制 0b10101 #进制转换函数 # ...
- ES_CCS/R(三):跨集群复制 Cross-cluster replication(CCR)
跨集群复制(CCR)功能支持将远程集群中的索引复制到本地集群. 可以在一些常见的生产用例中使用此功能: 灾难恢复(DR)/高可用性(HA):如果主群集发生故障,则进行灾难恢复. 辅助群集可以用作热备份 ...
- go http请求如果参数中带有"等特殊字符,参数传输可能会出现问题
编码完整的URL url.QueryEscape(urlStr) 编码完整的URL 如果我们要对完整的 URL 进行编码呢? 就是PHP中 urlencode() 函数的功能. 在 GO 语言下可以直 ...
- threejs的坐标渲染和着色
点击查看代码 function createBasic() { // 目标:了解顶点坐标绘制正方形 // 1. 准备 BufferGemotry 缓冲几何图形 // 2. 准备 32 位浮点数的数组, ...
- RuoYi(若依)前后端分离版本,windows下部署(nginx)
摘自:https://blog.csdn.net/yueyekkx/article/details/105505490 上一篇用了tomcat部署(https://blog.csdn.net/yuey ...
- mysql 命令行安装方式
一:下载 先到 mysql 官方网站下载:https://dev.mysql.com/downloads/mysql/ 点击直接下载: 解压到目录:D:\mysql-8.0.19-winx64 如图 ...
- 开发中你不得不知的一个Git小技巧
一. 背景 在工作中大家应会碰到需要频繁在两个分支中切换工作的情况,我们通常做法是利用git stash命令暂存当前工作区中的变更,然后git checkout到目标分支中工作,工作完成后回到刚刚分支 ...
- QShop商城-快速开始-前端
QShop商城-快速开始-前端 工具准备 NodeJs 前端环境为NodeJs,下载地址:http://nodejs.cn/download/current/ . 默认会用版本为Node 16,如找不 ...