我以下面的格式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
答案 0 :(得分:5)
我希望您实际上并没有将日期作为文本保存在数据库中。假设你不是(而且我认为你不是),你根本就不是“以下面的格式保存日期”......你只是保存日期。
日期的值不是具有格式 - 1976年6月19日是同一个日期,无论我是以这种方式代表,还是1976-06-19或19/06/1976或1976年6月19日(假设我知道如何解释任何这些格式)。这就是你在这里看到的 - 你正在保存日期,当你在“数据库”中查看它时(例如通过一些SQL控制台)你会看到一个表示......但是当你从数据库中获取它时并从Java打印,你看到调用Date.toString()
的结果。这根本不会改变值。
如果您想以特定方式格式化Date
值,请使用SimpleDateFormat
- 但要非常清楚Date
对象本身没有格式(或时区或日历) )您的数据库可能也没有。 (数据库内容的具体细节取决于数据库和列类型。)
区分该值的值和字符串表示非常重要。
例如,如果我写:
int x = 0xff;
int y = 255;
System.out.println(x == y);
然后打印“true” - 因为x
和y
都具有相同的值。事实上,在一种情况下,我使用十六进制表示并不会将值作为数字影响。
答案 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()