我已经/日期所存储的DD/MM格式如下字符串变量YY是英国格式定制Java中的日期格式是在特定的顺序
String s= "04-MAR-15"
String t ="04/03/15"
String p ="04/03/2015"
String w ="04-03-2015"
现在我想他们的转换在DD/MM/YYYY格式格式, 请指教我如何转换自己的格式,通过简单的Java的日期格式,并显示在控制台上。
我已经/日期所存储的DD/MM格式如下字符串变量YY是英国格式定制Java中的日期格式是在特定的顺序
String s= "04-MAR-15"
String t ="04/03/15"
String p ="04/03/2015"
String w ="04-03-2015"
现在我想他们的转换在DD/MM/YYYY格式格式, 请指教我如何转换自己的格式,通过简单的Java的日期格式,并显示在控制台上。
的过程是一个两个步骤的过程:
DateFormat
parse
方法转换的String
到Date
使用DateFormat
的方法格式与期望的转换的Date
到新String
格式使用SimpleDateFormat
具体类。请参阅文档以了解所需的模式。
FYI ,诸如['java.util.Date'](https://docs.oracle.com/javase/8/docs/api/java/util/Date.html)之类的麻烦的旧日期时间类,['java .util.Calendar'](https://docs.oracle.com/javase/8/docs/api/java/util/Calendar.html)和'java.text.SimpleTextFormat'现在是[legacy](https: //en.wikipedia.org/wiki/Legacy_system),由[java.time]代替(https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html)类。请参见[Oracle教程](https://docs.oracle.com/javase/tutorial/datetime/TOC.html)。 –
当你拥有的各种格式输入解析,如果这些格式是互斥的(不是暧昧彼此),只需尝试解析每个已知的可能格式,直到一个工作。当解析尝试失败时,捕获抛出的Exception并尝试使用下一个格式进行解析。
有关解析字符串转换成日期,唯一对象的详细信息,请参阅How can I change the date format in Java?许多Stack Overflow上已经取得其他职位。这是一个简短的代码示例。
首先,界定和收集一系列格式化对每项预期格式。
Locale locale = Locale.UK ;
List<DateTimeFormatter> formatters = new ArrayList<>(4);
formatters.add(DateTimeFormatter.ofPattern("dd-MMM-uu" , locale)) ;
formatters.add(DateTimeFormatter.ofPattern("dd-MM-uu" , locale)) ;
formatters.add(DateTimeFormatter.ofPattern("dd/MM/uuuu" , locale)) ;
formatters.add(DateTimeFormatter.ofPattern("dd-MM-uuuu" , locale)) ;
尝试每个格式化程序,直到一个成功。
LocalDate ld = null ;
for(DateTimeFormatter f : formatters) {
try{
ld = LocalDate.parse(input , f);
break ; // End this 'for' loop. We succeeded in parsing, so no need to try more formatters.
} catch (DateTimeParseException e) {
// Swallow this exception as we expect it when trying a series of formatters.
}
}
测试,看看是否所有的格式化无法解析。这意味着我们收到了意外格式的输入,一个错误情况。
if(null == ld) { // All the formatters were tried but failed.
… // Deal with unexpected input.
}
使用DateTimeFormatter
生成一个新的字符串作为输出。考虑使用ofLocalized…
方法而不是指定特定的格式。
就个人而言,我不建议人们使用两位数的年份。这不会导致混淆与月份和日期模糊不清。内存是足够便宜,而且屏幕够大,我们可以轻松负担的点点像素,支持4位数年的奢侈品。
另外,还要考虑完全避免你的模式。对于数据交换,仅使用标准ISO 8601格式。对于迄今为止,只有这将是YYYY-MM-DD,例如2017-01-23
。
的java.time框架是建立在Java 8和更高版本。这些类取代了日期时间类legacy,如java.util.Date
,Calendar
,& SimpleDateFormat
。
Joda-Time项目现在位于maintenance mode,建议迁移到java.time类。请参阅Oracle Tutorial。并搜索堆栈溢出了很多例子和解释。规格是JSR 310。
从何处获取java.time类?
的ThreeTen-Extra项目与其他类扩展java.time。这个项目是未来可能增加java.time的一个试验场。您可以在这里找到一些有用的类,如Interval
,YearWeek
,YearQuarter
和more。
在发布问题前做一些分析。在互联网上有很多例子 – Rehman
@Raheman同意你在java中有更多简单日期格式的例子 –
@Rehman你可以将它标记为一个副本..在这个例子中,你也需要一些分析..而不是粗鲁地说些什么。 –