关于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 OpenXML 读取 PPT 形状边框定义在 Style 的颜色画刷
本文来和大家聊聊在 PPT 形状使用了 Style 样式的颜色画刷读取方法 在开始之前,期望大家已了解如何在 dotnet 应用里面读取 PPT 文件,如果还不了解读取方法,请参阅 C# dotnet ...
- Windows 窗口样式 什么是 WS_EX_NOREDIRECTIONBITMAP 样式
我觉得我可以加入历史博物馆了,加入微软历史博物馆,本文也是和大家吹历史的博客 简单说这个 WS_EX_NOREDIRECTIONBITMAP 样式是 Win8 提供的,用来做画面图层混合的功能.什么是 ...
- js实现一个拖拽效果(本例vue中),边界限定,获取鼠标坐标,div坐标
有事没事搞个图: demo: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...
- SpringBoot项目预加载数据——ApplicationRunner、CommandLineRunner、InitializingBean 、@PostConstruct区别
0.参考.业务需求 参考: https://www.cnblogs.com/java-chen-hao/p/11835120.html#_label1 https://zhuanlan.zhihu.c ...
- Go pprof 认知到实践
快速开始 测试环境:go version go1.22.2 windows/amd64,源代码开源在 https://github.com/oldme-git/teach-study/tree/mas ...
- SHELL脚本获取域名对应的IP地址
单个获取 编写角本pingip.sh #!/bin/sh ADDR=qq.com TMPSTR=`ping ${ADDR} -c 1 | sed '1{s/[^(]*(//;s/).*//;q}'` ...
- AI编译器CINN v.s TVM 中CodeGen 源码解读
如下的技术点梳理仅以「日常优化工作」为牵引点,涉及哪个模块,就具体去看哪个模块的代码. 一.CINN 框架 CINN 中CodeGen之后的代码编译主要交给了Compiler类来负责.核心的函数主要是 ...
- Splashtop远程桌面再次增强:支持4K视频流
远程桌面工具,主流的有10款总有,国内用的比较多的有teamviewer.Splashtop.向日葵等.几款软件各有千秋,其中Splashtop最大的特性就是快速.流畅.产品无敌,运营佛系,哈哈.下面 ...
- 在 ThinkPad E470 上安装 Ubuntu 16.04 无线网卡驱动
目录 文章目录 目录 安装 安装 # 查看无线网卡驱动类型,E470 一般为 RTL8821CE lspci # 安装必要工具 sudo apt-get install build-essential ...
- 教你如何搞定springboot集成kafka
本文分享自华为云社区<手拉手入门springboot+kafka>,作者:QGS. 安装kafka 启动Kafka本地环境需Java 8+以上 Kafka是一种高吞吐量的分布式发布订阅消息 ...