我正在使用带有jquery日期选择器的struts2.x 我想以dd / mm / yyyy格式显示。但是从数据库中获取它时会像yyyy-mm-dd那样。然后我将其转换为所需的格式,但类型为String。接下来我将其转换为日期类型。但格式改变了。
Date getRiskCommDate()
{
String fString = null;
System.out.println("Coming Date from DB"+riskCommDate);
if(riskCommDate!=null)
{
SimpleDateFormat format = new SimpleDateFormat();
format.applyPattern("dd/MM/yyyy");
fString = format.format(riskCommDate);
}
System.out.println("Formated Date in String Form "+fString);
Date d = new Date(fString);
System.out.println("Formated Date in Date form Date "+d);
return d;
}
输出:
来自DB 2012-07-04的即将到来的日期 字符串表格中的格式化日期04/07/2012
日期格式的日期日期星期六07月07日00:00:00 IST 2012
非常感谢任何想法。
答案 0 :(得分:4)
java.util.Date
类没有任何属性来保存格式。
要以自定义格式显示Date
的值,请在format
上调用SimpleDateFormat
方法。
执行此操作时:
System.out.println(dateInstance)
...您只是在Date
上拨打toString()
。该方法以String
版本中的固定格式返回日期。
根据评论
如果你想要使用日期实例的自定义格式,那么你可以创建一个自定义类包装日期实例
class MyDate{
private Date date;
//provide appropriate accessor
//override toString() method to support required output
}
或extend
Date
class MyDate extends Date{
//override toString() method to support required output
@Override
public String toString(){
//convert `this` to String with required format with the help of `SimpleDateFormat`
}
}
答案 1 :(得分:2)
日期根据区域设置打印格式。它不会“记住”你希望你构建它的格式。只有字符串具有特定格式,因此如果需要,请将其保留为字符串。
答案 2 :(得分:0)
与早期Java捆绑在一起的旧麻烦的日期时间库已被Java 8及更高版本中内置的java.time框架所取代。对于Java 6& 7,使用后端口,ThreeTen-Backport,以及Android的适应性,ThreeTenABP。避免使用旧的java.util.Date/.Calendar等。
LocalDate
java.time类包含LocalDate
,表示没有时间且没有时区的仅限日期的值。
java.sql.Date
希望JDBC驱动程序将更新以直接处理java.time类型。在此之前,使用java.sql类型将数据移入/移出数据库。旧的java.sql类具有用于使用java.time进行转换的新to…
和valueOf
方法。我们感兴趣的是java.sql.Date
。
LocalDate localDate = myJavaSqlDate.toLocalDate();
您可以转到另一个方向,提交到数据库。
java.sql.Date myJavaSqlDate = java.sql.Date.valueOf( localDate );
所讨论的日期类(java.util.Date,java.sql.Date,java.time.LocalDate)都没有任何“格式”。只有其值的文本表示具有格式。如果需要String,那些类可以为您生成String对象。但是不要将String对象与日期时间对象混淆,因为它们是完全独立且不同的。
toString
上的LocalDate
方法使用标准ISO 8601格式,例如2012-07-04
(意味着2012年7月4日)。
String outputIso8601 = localDate.toString();
对于其他格式,请使用DateTimeFormatter
。关于Stack Overflow的许多其他问题和解答有更多的讨论。
DateTimeFormatter formatter = DateTimeFormatter.ofPattern( "dd/MM/yyyy" );
String output = localDate.format( formatter ); // Generates a textual representation of the object’s date-only value.
更好的是,让java.time为你本地化。
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDate( FormatStyle.SHORT );
formatter = formatter.withLocale( Locale.CANADA_FRENCH ); // or Locale.US, and so on.
String output = localDate.format( formatter );
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time类。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。