Java 数据库中的时间戳和文本文件中的时间戳格式不同

Java 数据库中的时间戳和文本文件中的时间戳格式不同,java,mysql,sql,format,timestamp,Java,Mysql,Sql,Format,Timestamp,我将应用程序中的当前时间作为时间戳保存到MYSQL数据库中,作为备份,我将把日期保存到文本文件中。但是,TimeStame的格式不一样,我希望它们是相同的,因为我需要abel来比较它们 数据库使用datetime类型,时间戳格式为“2014-07-23 09:50:14” 在文本文件中,时间戳的格式为“2014-07-23 09:51:25.877” 我正在使用preparedstatement保存到数据库 preparedStatement.setTimestamp(2, new Timest

我将应用程序中的当前时间作为时间戳保存到MYSQL数据库中,作为备份,我将把日期保存到文本文件中。但是,TimeStame的格式不一样,我希望它们是相同的,因为我需要abel来比较它们

数据库使用datetime类型,时间戳格式为“2014-07-23 09:50:14”

在文本文件中,时间戳的格式为“2014-07-23 09:51:25.877”

我正在使用preparedstatement保存到数据库

preparedStatement.setTimestamp(2, new Timestamp(new Date().getTime()));
我正在使用BufferedWriter保存到文本文件

bufferedWriter.write(new Timestamp(new Date().getTime())
如何使格式相同,以便比较时间戳


顺便说一下,我不需要毫秒精度,我只希望格式相同

这是不同的,因为您创建了相隔几秒钟的两个时间戳。您应该创建一个时间戳并写入两个位置

未经测试:

Timestamp stamp = new Timestamp(new Date().getTime());

preparedStatement.setTimestamp(2, stamp);

bufferedWriter.write(stamp)
要在MySQL中存储分数秒,请参阅:

MySQL 5.7支持时间、日期时间和时间戳值的小数秒,精度高达微秒(6位):

要定义包含小数秒部分的列,请使用语法type_name(fsp),其中type_name是时间、日期时间或时间戳,fsp是小数秒精度。例如:

CREATE TABLE t1 (t TIME(3), dt DATETIME(6));

fsp值(如果给定)必须在0到6之间。值为0表示没有小数部分。如果省略,默认精度为0。(为了与以前的MySQL版本兼容,这与标准SQL默认值6不同。)

在将日期插入数据库之前,可以使用以下方法格式化日期:

SimpleDateFormat dt1 = new SimpleDateFormat("yyyyy-mm-dd hh:mm:ss");
dt1.format(date);

这将解决您的问题

当您将时间戳保存到数据库时,它会将timstamp保存在其timestamp数据类型中。您看到的演示文稿是因为您使用了查看数据的工具。数据库中的实际值也保存了毫秒部分。要测试这一点,请尝试运行
SELECT
query并用Java构建Timestamp对象。将其与从文本文件构建的时间戳对象进行比较。如果仍然不起作用,那么发布完整的代码。@Pat您是对的。然而,当我使用查询从数据库获取时间戳时,PMA似乎隐藏了毫秒部分。毫秒部分始终为0,例如2014-07-23 10:23:12.0。您在这里使用MySQL运气不佳。查看这篇文章。看来mySQL不支持毫秒!我不知道。嗯,我想,今天学到了一些东西-永远不要使用MySQL数据库:)@Pat我不需要毫秒精度,我只需要数据库和文本文件的格式都相同。如果不需要毫秒,那么在将时间戳写入文本文件时截断时间戳(使用SimpleDataFormat)。e、 g.
SimpleDateFormat NomilliseCondFormatter=新的SimpleDateFormat(“yyyy-MM-dd-HH:MM:ss”);System.out.println(noMilliSecondsFormatter.format(timestamp))因为我从未同时保存到数据库和文本文件,所以这不是问题。问题是文本文件和数据库中的格式不同。谢谢您的时间。@Chrippe-Answer更新为SQL分数秒解决方案。谢谢您,将MYSQL数据库更新为5.7。