我的JSP页面上有一个日期选择器字段。选择该字段时,日期将以日文格式(2013年11月24日
)显示在我的文本字段中。现在,在我的控制器中读取该日期字段时,我得到此值2013年11月24日
。
如何将此日期格式转换为普通日期格式?
答案 0 :(得分:3)
您给出的格式似乎是日语区域设置的默认日期格式,因此您可以使用内置版本:
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, new Locale("ja"));
Javadoc:http://docs.oracle.com/javase/7/docs/api/java/text/DateFormat.html
IDEONE示例:http://ideone.com/0W7szq
DateFormat df = DateFormat.getDateInstance(DateFormat.FULL, new Locale("ja"));
System.out.println(df.format(new Date()));
System.out.println(df.parse("2013年11月24日"));
输出:
2013年11月24日
Sun Nov 24 00 00:00:00 GMT 2013
编辑:
请注意,此DateFormat类不是线程安全的,因此您无法使该瞬时静态。如果您不想像上面那样反复创建实例,您可能需要在Joda时间内查看线程安全的变体:DateTimeFormat。
答案 1 :(得分:1)
分隔符是否始终相同?
如果是这样,你不能只使用SimpleDateFormat("yyyy年MM月dd")
吗?
答案 2 :(得分:1)
Answer by billc.cn是正确但过时的。麻烦的旧日期时间类现在已经遗留下来,取而代之的是java.time类。
DateTimeFormatter f = DateTimeFormatter.ofLocalizedDate( FormatStyle.FULL );
f = f.withLocale( Locale.forLanguageTag("ja") ) ;
String input = "2013年11月24日" ;
LocalDate ld = LocalDate.parse( input , f );
输入:2013年11月24日
ld.toString():2013-11-24
LocalDate
LocalDate
类表示没有时间且没有时区的仅限日期的值。
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
您应使用LocalDate
个对象在您的业务逻辑和数据模型中保存仅限日期的值。仅根据需要生成字符串,例如在JSP页面中显示。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和& SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。