解决java.sql.Timestamp丢失精度的问题

目录
  • java.sql.Timestamp丢失精度
    • 需要重新补偿
  • java.sql.Timestamp类的使用
    • 1. 获取当前时间
    • 2.String类型转换为Timestamp
    • 3.Timestamp转换为String类型

java.sql.Timestamp丢失精度

Timestamp的构造函数Timestamp(long time) 会丢失纳秒部分的精度

需要重新补偿

        Timestamp t1 = Timestamp.valueOf("2019-12-13 15:19:53.2202080");
        Timestamp t2 = new Timestamp(1576250393220208000L / 1000000L);
        t2.setNanos((int) (1576250393220208000L % 1000000000L));

java.sql.Timestamp类的使用

Timestamp 可以精确到小数秒 一般存储的格式:2016-12-18 11:05:36.531

Timestamp 可以获取当前时间,也可以把字符串装换成Timestamp类型

1. 获取当前时间

@Test
public void getCurrentTime(){
	//第一种
	Date date = new Date();
	Timestamp currentTime1 = new Timestamp(date.getTime());
	System.out.println("currentTime1:"+currentTime1);
	//第二种
	Timestamp currentTime2 = new Timestamp(System.currentTimeMillis());
	System.out.println("currentTime2:"+currentTime2);
}

2.String类型转换为Timestamp

@Test
public void stringConvertTimestamp(){
	String timeStr = "2016-12-18 11:16:33.706";
	Timestamp ts = Timestamp.valueOf(timeStr);
	System.out.println(ts);
}

3.Timestamp转换为String类型

@Test
public void timestampConvertString(){
	SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
	Timestamp currentTime = new Timestamp(System.currentTimeMillis());
	String timeStr = sdf.format(currentTime);
	System.out.println(timeStr);
}

整个演示类的代码:

package com.demo;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.junit.Test;
public class DemoTimestamp {
	@Test
	public void getCurrentTime(){
		//第一种
		Date date = new Date();
		Timestamp currentTime1 = new Timestamp(date.getTime());
		System.out.println("currentTime1:"+currentTime1);
		//第二种
		Timestamp currentTime2 = new Timestamp(System.currentTimeMillis());
		System.out.println("currentTime2:"+currentTime2);
	}
	@Test
	public void stringConvertTimestamp(){
		String timeStr = "2016-12-18 11:16:33.706";
		Timestamp ts = Timestamp.valueOf(timeStr);
		System.out.println(ts);
	}
	@Test
	public void timestampConvertString(){
		SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");
		Timestamp currentTime = new Timestamp(System.currentTimeMillis());
		String timeStr = sdf.format(currentTime);
		System.out.println(timeStr);
	}
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Sqlserver timestamp数据类使用介绍

    在SQL Server中联机丛书是这样说的: SQL Server timestamp 数据类型与时间和日期无关.SQL Server timestamp 是二进制数字,它表明数据库中数据修改发生的相对顺序.实现 timestamp 数据类型最初是为了支持 SQL Server 恢复算法.每次修改页时,都会使用当前的 @@DBTS 值对其做一次标记,然后 @@DBTS 加1.这样做足以帮助恢复过程确定页修改的相对次序,但是 timestamp 值与时间没有任何关系. 我用口水话解释一下便于理解:

  • Java java.sql.Timestamp时间戳案例详解

    java.sql.Timestamp(时间戳) 继承父类:java.util.Date 所有已实现的接口:Serializable, Cloneable, Comparable<Date>  主要构造方法:Timestamp(long millis) 使用毫秒时间值构造 Timestamp 对象. Timestamp允许 JDBC API 将该类标识为 SQL TIMESTAMP 值.它通过允许小数秒到纳秒级精度的规范来添加保存 SQLTIMESTAMP 小数秒值的能力. Timestamp

  • Java中Date,Calendar,Timestamp的区别以及相互转换与使用

    1 Java.util.Date包含年.月.日.时.分.秒信息. 复制代码 代码如下: // String转换为DateString dateStr="2013-8-13 23:23:23";String pattern="yyyy-MM-dd HH:mm:ss";DateFormate dateFormat=new SimpleDateFormat(pattern);Date date=dateFormat.parse(dateStr);date=dateForm

  • 解决java.sql.Timestamp丢失精度的问题

    目录 java.sql.Timestamp丢失精度 需要重新补偿 java.sql.Timestamp类的使用 1. 获取当前时间 2.String类型转换为Timestamp 3.Timestamp转换为String类型 java.sql.Timestamp丢失精度 Timestamp的构造函数Timestamp(long time) 会丢失纳秒部分的精度 需要重新补偿 Timestamp t1 = Timestamp.valueOf("2019-12-13 15:19:53.2202080&

  • Java序列化JSON丢失精度问题的解决方法(修复Long类型太长)

    目录 原因: 解决办法一: 解决办法(二): 总结 Java序列化JSON时long型数值,会出现精度丢失的问题. 原因: java中得long能表示的范围比js中number大,也就意味着部分数值在js中存不下(变成不准确的值). 解决办法一: 使用ToStringSerializer的注解,让系统序列化时,保留相关精度 @JsonSerialize(using=ToStringSerializer.class) private Long createdBy; 上述方法需要在每个对象都配上该注

  • 解决BigDecimal转long丢失精度的问题

    我就废话不多说了,大家还是直接看代码吧~ public static void main(String[] args) { BigDecimal asdBigDecimal = new BigDecimal(56.33347); long sad = asdBigDecimal.longValue(); double asda = asdBigDecimal.doubleValue(); System.out.println(sad); System.out.println(asda); } 运

  • 解决java数值范围以及float与double精度丢失的问题

    1.java中int,float,long,double取值范围 public class TestOutOfBound { public static void main(String[] args) { System.out.println(Integer.MAX_VALUE-(-Integer.MAX_VALUE)); //内存溢出 System.out.println(Integer.MAX_VALUE); //2的31次方-1,10个数位,正的20亿左右,用在钱上面不一定够 Syste

  • SpringBoot2.0解决Long型数据转换成json格式时丢失精度问题

    目录 解决Long型数据转换成json格式时丢失精度 SpringBoot时间格式,Long型精度丢失常见问题 时间格式,Long型精度丢失 解决Long型数据转换成json格式时丢失精度 最近项目中突然发现雪花算法生成的数据库主键id返回给前端时和本身的值不一致,于是后端进行断点调试发现没问题,于是问题聚焦于转换json格式,于是自定义Json 格式化,因为使用Springboot,全是自动化配置,所以要覆盖框架本身的转换方式,经翻阅官方文档,提下下列注解,自定json转换 代码如下: @Js

  • MySQL存储表情时报错:java.sql.SQLException: Incorrect string value:‘\xF0\x9F\x92\xA9\x0D\x0A...’的解决方法

    前言 本文主要介绍了关于MySQL存储表情报错:java.sql.SQLException: Incorrect string value: '\xF0\x9F\x92\xA9\x0D\x0A...'的相关解决方法,分享出供大家参考学习,下面话不多说了,来一起看看详细的介绍: 本项目是基于Spring MVC + MySQL + Druid DataSource.在往数据库插入表情Emoji字符时报错: java.sql.SQLException: Incorrect string value:

  • 解决IDEA错误 Cause: java.sql.SQLException: The server time zone value的问题

    在我们配置文件的时候 运行会报The server time zone的错 Cause: java.sql.SQLException: The server time zone value 错误源头 解决办法 添加如下的代码 不要忘了有? ?serverTimezone=Asia/Shanghai 再次运行即可 总结 到此这篇关于解决IDEA错误 Cause: java.sql.SQLException: The server time zone value的问题的文章就介绍到这了,更多相关ID

  • java为什么会出现精度丢失这种现象你知道吗

    目录 1.二进制转十进制 2.(整数)十进制转二进制 3.(小数)十进制转二进制(可除尽) 4.(小数)十进制转二进制(除不尽) 总结:   很多人都知道:浮点数值不适用于无法接受舍入误差的金融计算中,即:我们常说的丢失精度问题. 这是为什么呢? 很多人还知道这样一句话:这种舍入误差的主要原因是浮点数值采用二进制系统表示, 而在二进制系统中无法精确地表示分数 1/10.这就好像十进制无法精确地表示分数 1/3-样. 针对十进制,1除以3是除不尽的.很好理解,因为我们一直接触的就是十进制,等于0.

  • SpringBoot全局配置long转String丢失精度问题解决方案

    web项目中,前端JS使用Java后端传过来的Long/long会丢失精度. 后端将返回的数据改为String使用即可 第一种 自己建个配置类 extends WebMvcConfigurerAdapter 已经被弃用,直接实现WebMvcConfigurer该接口就行了 @EnableWebMvc @Configuration public class WebDataConvertConfig implements WebMvcConfigurer { public void configur

随机推荐