Java中时间的精度问题

mikesu 2008-07-18 11:03:34
1、我需要一个精确到毫秒的时间记录在MySql数据库中。数据库中用哪一种数据类型呢?(Date,DateTime,Time,Timestamp)这几种类型有什么区别呢?
2、我通过Hibernate Tools生产到实体java,我数据库中字段设置为DateTime或者Timestamp,生成出来的java类型都是Date.为什么呢?这样会对精度有影响吗?
3、我想记录当前时间进入数据库,我需要程序生成的时间,不用数据库内置的函数。我用Date now = new Date();来生成。但是我在数据库查看是只能精确到秒。如何生成精度更高的当前时间呢?
4、假如我能生成精确到毫秒的时间,我如果格式转换?是否直接用now.toString();就可以全部信息都显示呢?格式没有特别的要求,只有能显示到毫秒就可以了。
...全文
1197 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
steven_cheng 2008-07-18
  • 打赏
  • 举报
回复
时间精确度问题,涉及到几个方面,包括硬件、操作系统、JVM、数据库
首先不能肯定你所用的JVM和操作系统平台能否支持精确到毫秒。
假设你的JVM能支持到毫秒,MySql数据库你提到的几个和时间相关的字段类型,精度只到秒。
如果你想用MqSql保存一个精度到毫秒的值,只能用java.util.Date.getTime()得到一个精度到毫秒的long型数据,把这个long型数据保存在数据库中。

1、我需要一个精确到毫秒的时间记录在MySql数据库中。数据库中用哪一种数据类型呢?(Date,DateTime,Time,Timestamp)这几种类型有什么区别呢?
Date精度只到日,DateTime,日期时间,精度到秒,Time只有时间没有日期,Timestamp时间戳,精度到秒,timestamp可以由数据库自己插入
具体的区别可以参考mysql手册。

2、我通过Hibernate Tools生产到实体java,我数据库中字段设置为DateTime或者Timestamp,生成出来的java类型都是Date.为什么呢?这样会对精度有影响吗?
java.util.Date是表示时间的通用数据类型,数据库中的类型Date都可以表示。对精度也没有影响。Date具体精度依赖JVM等等,如果是从数据库中得到的值,精度依赖于数据库

3、我想记录当前时间进入数据库,我需要程序生成的时间,不用数据库内置的函数。我用Date now = new Date();来生成。但是我在数据库查看是只能精确到秒。如何生成精度更高的当前时间呢?
System.currentTimeMillis();可以得到系统的毫秒,但是前面说了,精度还是依赖于操作系统平台,绝大多数都无法达到毫秒,可能的精度是几十个毫秒。你可以把这个数据存入数据库,这个long值可以很方面的转为Date类型。
Date date = new Date();
date.setTime(xxx);
xxx就是你从数据库中取得的long值。

4、假如我能生成精确到毫秒的时间,我如果格式转换?是否直接用now.toString();就可以全部信息都显示呢?格式没有特别的要求,只有能显示到毫秒就可以了。
格式转换用java.text.SimpleDateFormat,如yyyy-MM-dd HH:mm:ss.SSS就可以转换得到一个到毫秒的Date字符串,前提是你的Date精度能达到毫秒
mikesu 2008-07-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangshizhu79 的回复:]
LZ说的是MYSQL数据库
MYSQL里TIMESTAMP是精确到秒的
[/Quote]

那MySql中那个时间数据类型可以精确到毫秒呢?
wangshizhu79 2008-07-18
  • 打赏
  • 举报
回复
LZ说的是MYSQL数据库
MYSQL里TIMESTAMP是精确到秒的
reality 2008-07-18
  • 打赏
  • 举报
回复
精确到毫秒
lovingprince 2008-07-18
  • 打赏
  • 举报
回复
现在都推荐使用java.util.Date了。
reality 2008-07-18
  • 打赏
  • 举报
回复
Date 日期
Time 时间
DateTime 日期加时间
Timestamp 时间戳
mikesu 2008-07-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lovingprince 的回复:]
1.Timestamp
2.java里面统一使用Date进行处理,没有影响
3.类Date是可以精确到毫秒的,你在存入数据库时需要指定
4.通过Calendar.getTimeInMillis() 可以获得毫秒时间,将date转换成Calendar
[/Quote]

2、是用java.util.Date还是java.sql.Date?
3、如何指定?例如我有一个实体:

@Entity
@Table(name = "log")
public class Log implements java.io.Serializable {

private String id;
private Date time;

@Id
@GeneratedValue(generator="hibernate-uuid")
@GenericGenerator(name="hibernate-uuid",strategy="uuid.hex")
@Column(name = "id", unique = true, nullable = false, length = 32)
public String getId() {
return this.id;
}

public void setId(String id) {
this.id = id;
}

@Temporal(TemporalType.TIMESTAMP)
@Column(name = "time", nullable = false, length = 19)
public Date getTime() {
return this.time;
}

public void setTime(Date time) {
this.time = time;
}

}


Log log = new Log();
log.setTime(new Date());
dao.save(log);

这样保存到数据库的。如何设定精度。

jingulang 2008-07-18
  • 打赏
  • 举报
回复
楼上讲的好

但Date,DateTime,Time,Timestamp有什么区别 能再讲一下不

学习啦
lovingprince 2008-07-18
  • 打赏
  • 举报
回复
1.Timestamp
2.java里面统一使用Date进行处理,没有影响
3.类Date是可以精确到毫秒的,你在存入数据库时需要指定
4.通过Calendar.getTimeInMillis() 可以获得毫秒时间,将date转换成Calendar
mikesu 2008-07-18
  • 打赏
  • 举报
回复
问题得到了完美的解决。
就是数据库的精度不够的问题。
现在用MySql中的BigInt来存储时间。
经过Hibernate Tools生成实体的类型是long,
这样就可以
Date now = new Date();
now.getTime();
获得时间然后存储在数据库中。
取出的时候再转换成Date类型。

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧