我们可以将字符串格式化日期dd / mm / yyyyy转换为相同格式的日期类型吗?

时间:2012-07-05 07:15:08

标签: java date simpledateformat

我正在使用带有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

非常感谢任何想法。

3 个答案:

答案 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.time

与早期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.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.DateCalendar和& SimpleDateFormat

现在位于Joda-Timemaintenance 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的试验场。您可以在此处找到一些有用的课程,例如IntervalYearWeekYearQuartermore