这个问题可能经常在这里得到解答,但我无法找到特定于我的问题的答案,我也试图通过http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html并推断一些但无济于事。
我有一个简单的字符串日期YYYY-MM-DD
,我希望将其转换为相应的日期类型,如DD-MM-YYYY
,并将其保存在日期类型列下的数据库中。任何帮助将受到高度赞赏。
答案 0 :(得分:2)
试试这种方式
String DateStr="2012-12-12";
Date d = new SimpleDateFormat("yyyy-MM-dd").parse(DateStr);
java.sql.Date d1 = new java.sql.Date(d.getTime());
现在,如果您正在使用PreparedStatement,那么
pt.setDate(1,d1);
答案 1 :(得分:0)
使用TreeMap而不是HashMap。由于Date已经实现了Comparable,它将在插入时自动排序。
Map<Date, ArrayList> m = new TreeMap<Date, ArrayList>();
或者,如果您有一个现有的HashMap并想要基于它创建一个TreeMap,请将其传递给构造函数:
Map<Date, ArrayList> sortedMap = new TreeMap<Date, ArrayList>(m);
答案 2 :(得分:0)
如果您的方案是将字符串转换为日期然后将其保存到您的数据库,那么我认为您不必将字符串转换为日期,只需传递具有适当格式的日期字符串(这取决于您的数据库供应商)到您的插入方法,它将成功保存到您的数据库中。
答案 3 :(得分:0)
当您的数据库中有“10-07-2015”和“01-08-2017”等字符串并使用ORDER BY时,打印结果将按“01-08-2017”,“10-”的顺序排列07-2015“。
将字符串日期放入Treemap时会发生同样的事情,因为Treemap和ORDER BY都将输入标识为数字,而不是日期。
当您使用其他日期格式时,例如“yyyy-MM-dd”,此处打印输出的顺序正确,“2015-07-10”,2017-08-01“。但它在错误的日期格式。
一种解决方法是将日期转换为long,然后再将它们添加到数据库中:
Date date_1 = Mon Jul 10 16:06:22 BRT 2015;
Date date_2 = Fri Aug 01 14:04:23 BRT 2017;
Long long_Date_1 = date_1.getTime(); // (prints something like 1502133102260)
Long long_Date_2 = date_2.getTime(); // (prints something like 1233335544343)
当您将这些long放入数据库时,您可以从数据库中检索它们并轻松地将它们转换为具有所需格式的日期字符串:
Date date_1 = new Date ( long_Date_1 );
Date date_2 = new Date ( long_Date_2 );
SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
formatter.format(date_1)); // prints "10-07-2015"
formatter.format(date_2)); // prints "01-08-2017"