保存到数据库时,日期以不同的格式保存

时间:2013-05-02 19:17:04

标签: java date

我以下面的格式EEE MMM dd HH:mm:ss z yyyy保存日期,但是以这种格式2013-05-03 00:38:20.0保存。但是当我在保存到数据库之前在控制台上打印相同的日期时,它是预期的INFO: Fri May 03 00:38:20 IST 2013

请任何人解释为什么如上所述保存。

以下是代码:

Date now = new Date();
String datetimeStr = now.toString();
SimpleDateFormat format = new SimpleDateFormat(
"EEE MMM dd HH:mm:ss z yyyy");
Date parseDate = format.parse(datetimeStr);

数据库列

date_order_created date

3 个答案:

答案 0 :(得分:5)

希望您实际上并没有将日期作为文本保存在数据库中。假设你不是(而且我认为你不是),你根本就不是“以下面的格式保存日期”......你只是保存日期。

日期的值不是具有格式 - 1976年6月19日是同一个日期,无论我是以这种方式代表,还是1976-06-19或1​​9/06/1976或1976年6月19日(假设我知道如何解释任何这些格式)。这就是你在这里看到的 - 你正在保存日期,当你在“数据库”中查看它时(例如通过一些SQL控制台)你会看到一个表示......但是当你从数据库中获取它时并从Java打印,你看到调用Date.toString()的结果。这根本不会改变

如果您想以特定方式格式化Date值,请使用SimpleDateFormat - 但要非常清楚Date对象本身没有格式(或时区或日历) )您的数据库可能也没有。 (数据库内容的具体细节取决于数据库和列类型。)

区分该值的值和字符串表示非常重要。

例如,如果我写:

int x = 0xff;
int y = 255;
System.out.println(x == y);

然后打印“true” - 因为xy都具有相同的值。事实上,在一种情况下,我使用十六进制表示并不会将值作为数字影响。

答案 1 :(得分:1)

来自here
以下代码根据传递给SimpleDateFormat构造函数的模式String格式化日期和时间。 format方法返回的String包含要显示的格式化日期和时间。

Date today;
String output;
SimpleDateFormat formatter;

formatter = new SimpleDateFormat(pattern, currentLocale);
today = new Date();
output = formatter.format(today);
System.out.println(pattern + " " + output);
The following table shows the output generated by the previous code ex
Pattern              Output
EEE, MMM d, ''yy    Tue, Jun 30, '09

答案 2 :(得分:0)

在数据库中保存Date objet时,通常不会保存其String表示形式。这取决于数据库中使用的字段类型。

并且:

Fri May 03 00:38:20 IST 2013 

看起来像是date.toString()