我需要以下列格式获取java.sql.date" MM-dd-yyyy",但是我需要它来保留java.sql.date所以我可以把它放到一个表中作为日期字段。因此,格式化后它不能是String,它必须最终作为java.sql.date对象。
这是我到目前为止所尝试的:
java.util.Date
today=new Date();
String date = formatter.format(today);
Date todaydate = formatter.parse(date);
java.sql.Date fromdate = new java.sql.Date(todaydate.getTime());
java.sql.Date todate=new java.sql.Date(todaydate.getTime());
String tempfromdate=formatter.format(fromdate);
String temptodate=formatter.format(todate);
java.sql.Date fromdate1=(java.sql.Date) formatter.parse(tempfromdate);
java.sql.Date todate1=(java.sql.Date) formatter.parse(temptodate);
答案 0 :(得分:7)
您可以采用与java.util.Date
相同的方式(因为java.sql.Date
是java.util.Date
的子类)且SimpleDateFormat
SimpleDateFormat sdf = new SimpleDateFormat(
"MM-dd-yyyy");
int year = 2014;
int month = 10;
int day = 31;
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, year);
cal.set(Calendar.MONTH, month - 1); // <-- months start
// at 0.
cal.set(Calendar.DAY_OF_MONTH, day);
java.sql.Date date = new java.sql.Date(cal.getTimeInMillis());
System.out.println(sdf.format(date));
输出是预期的
2014年10月31日
答案 1 :(得分:2)
使用以下代码我今天转换日期。从中学习并尝试使用您的代码
Date today = new Date();
//If you print Date, you will get un formatted output
System.out.println("Today is : " + today);
//formatting date in Java using SimpleDateFormat
SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("MM-dd-yyyy");
String date = DATE_FORMAT.format(today);
System.out.println("Today in MM-dd-yyyy format : " + date);
Date date1 = formatter.parse(date);
System.out.println(date1);
System.out.println(formatter.format(date1));
答案 2 :(得分:1)
更简单的解决方案是在比较之前将查询中的日期转换为纪元。
SELECT date_column from YourTable where UNIX_TIMESTAMP(date_column) > ?;
然后,在将值绑定到date.getTime()
时,只需传递?
。
注意:UNIX_TIMESTAMP
函数适用于MySQL。您也可以为其他数据库找到这样的功能。
答案 3 :(得分:0)
formatter.parse
只会为您提供java.util.Date
而不是java.sql.Date
获得java.util.Date
后,您可以通过
java.sql.Date
java.sql.Date sqlDate = new java.sql.Date (normalDate.getTime ());
另请注意,没有日期有任何内置格式,实际上它是建立在数字之上的类。
答案 4 :(得分:0)
java.util.Date today=new Date();
java.sql.Date date=new java.sql.Date(today.getTime()); //your SQL date object
SimpleDateFormat simpDate = new SimpleDateFormat("MM-dd-yyyy");
System.out.println(simpDate.format(date)); //output String in MM-dd-yyyy
请注意,如果您的日期格式为mm-dd-yyyy或任何其他格式无关紧要,当您比较日期(java.sql.Date或java.util.Date)时,它们将始终以它们代表的日期。日期格式只是一种以所需格式设置或获取日期的方式。
答案 5 :(得分:0)
对于在2017年或之后阅读此内容的任何人,现代解决方案使用来自LocalDate
的{{1}},即现代Java日期和时间API,而不是java.time
。后者很久了。
格式化日期
java.sql.Date
这会打印类似
的内容 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-dd-uuuu", Locale.US);
LocalDate fromDate = LocalDate.now(ZoneId.of("Asia/Kolkata"));
String tempFromDate = fromDate.format(formatter);
System.out.println(tempFromDate);
请勿将日期值与其文字表示混淆
11-25-2017
和LocalDate
对象都没有固有的格式。因此,请尝试 - 并在必要时尽力 - 保持两个概念不同,一方面的日期和另一方面的用户表示。
就像java.sql.Date
和所有其他数据类型一样。 int
的值可以为4284.您可以将其格式化为4,284或4 284,004284,甚至可以格式化为十六进制表示。这绝不会改变int
本身。同样,格式化日期不会影响日期对象。因此,使用字符串呈现给用户,并使用int
存储到数据库中(现代JDBC驱动程序或其他现代数据库访问方式将很乐意这样做,例如通过LocalDate
)
使用显式时区
获取今天的日期属于时区敏感操作,因为它与世界上所有时区的日期不同。我强烈建议您在代码中明确说明这一事实。在我使用亚洲/加尔各答时区的片段中,请替换您想要的时区。您可能使用PreparedStatement.setObject()
进行JVM的时区设置,但请注意,您的程序的其他部分或在同一JVM中运行的其他程序可能会更改此设置,所以这很脆弱。