关于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好多少.它们面临的问题是: ① 可 ...
随机推荐
- [K8s] Kubernetes核心基础概念 Node, Pod, ReplicaSet, Deployment, Service, Ingress, ConfigMap
Node 即 Kubernetes 集群中的一台工作机器,物理机或者虚拟机. https://kubernetes.io/zh/docs/concepts/architecture/nodes/ 通常 ...
- dotnet SemanticKernel 入门 开篇
本文将开坑告诉大家什么是 SemanticKernel 以及如何使用框架 众所周知 GPT 是一个大语言模型,能够参与的输入和输出是文本内容.而想要让 GPT 完成各项功能,则需要对接现有的编程世界. ...
- WPF 全屏窗口将让 Chrome 97 视频停止播放
无论是使用 WPF 全屏窗口,还是高性能全屏透明窗口,都会在 Chrome 97 以及使用 chromium 对应版本内核的应用的视频停止播放.这是 chromium 的一个优化,因为 chromiu ...
- vue全国省市选择vue组件
没用懂checkbox,干脆自己定义布尔值,方便数据页面响应. 可以再原始省市数据 下载address.js文件 1.初始化数据格式: 2页面样式: 3.对应输出的数据格式: 4.源码: <!D ...
- 11K+ Star!图解计算机网络、操作系统、计算机组成、数据库!
大家好,我是 Java陈序员. 俗话说得好,面试造火箭,入职拧螺丝.我们在工作中,其实很少用到一些计算机底层知识,往往只要编码完事.但是,知其然还要知其所以然,我们不仅要做一个合格的"CV ...
- 【OpenVINO™】基于 C# 和 OpenVINO™ 部署 Blazeface 模型实现人脸检测
前言 OpenVINO C# API 是一个 OpenVINO 的 .Net wrapper,应用最新的 OpenVINO 库开发,通过 OpenVINO C API 实现 .Net 对 OpenV ...
- MySQL:根据指定日期加365天,当前时间距离明年的指定的日期还有多少天-SQL
一.数据准备 /* Navicat Premium Data Transfer Source Server : songweipeng Source Server Type : MySQL Sourc ...
- 从零开始写 Docker(十四)---重构:实现容器间 rootfs 隔离
本文为从零开始写 Docker 系列第十四篇,实现容器间的 rootfs 隔离,使得多个容器间互不影响. 完整代码见:https://github.com/lixd/mydocker 欢迎 Star ...
- zabbix使用
安装部署6.0版本 获取仓库 https://www.zabbix.com/cn/download?zabbix=6.0&os_distribution=centos&os_versi ...
- webapi动态创建后台任务(使用排队的后台任务)
很多时候我们都会使用后台定时任务,但有些任务不需要定时执行,只需要请求到来时执行一次,比如请求服务器到某个地方同步数据,但请求不需要等数据同步完成再响应.这时候就可以使用排队的后台任务. 基本原理是用 ...