很多时候,我试图弄清楚如何解析不同的日期格式。在输入中,我们有几行:
1987-03-23
null
1985-11-29
23-07-2000
17-10-1984
应将其翻译成dd.MM.yyyy俄语(如在我的任务中一样,可以更改)格式,并在不匹配该模式的地方绘制破折号。
我决定是这样
public class DateUtil {
public static String validDateString(String strDate) {
final List<String> dateFormats = Arrays.asList("yyyy-MM-dd", "dd-MM-yyyy", "MM-dd-
yyyy", "MM/dd/yyyy", "dd/MM/yyyy");
SimpleDateFormat sdf;
//Our new format
final String RU_FORMAT = "dd.MM.yyyy";
String output = "-";
//Reviewing for all templates
for (String format : dateFormats) {
sdf = new SimpleDateFormat(format, new Locale("ru"));
//Do not try to analyze dates that do not match the format
sdf.setLenient(false);
try {
if (sdf.parse(strDate) != null) {
Date date = sdf.parse(strDate);
sdf.applyPattern(RU_FORMAT);
return sdf.format(date);
}
break;
} catch (ParseException e) {
}
}
//Display line with a dash
return output;
}
}
您可以在此行中调用此方法:
DateUtil.validDateString(input_line);
答案 0 :(得分:0)
旧的Date
,Calendar
和SimpleDateFormat
类是糟糕的糟糕设计。切勿使用它们。现在已被 java.time 类取代。
首先测试输入字符串是否等于“ null”。
接下来,仅使用LocalDate.parse( "1987-03-23" )
解析第一种格式并捕获异常。默认情况下会处理该标准ISO 8601格式,因此无需指定格式格式。
最后,定义一个格式设置模式DateTimeFormatter.ofPatten( "dd-MM-uuuu" )
并用LocalDate.parse( input , formatter )
进行解析。捕获异常。
如果所有这些都失败,那么您会有意外的输入。
一旦手头有一个LocalDate
对象,请使用LocalDate.format
生成一个字符串,并在其中传递一个DateTimeFormatter
。您可以定义一个格式化模式,如上所示。或者,您可以调用DateTimeFormatter.ofLocalizedDate
来让 java.time 为您自动本地化。
这个问题已经被涵盖了很多次了。在Stack Overflow中搜索这些类名,以查看更多详细信息和更多代码。
我建议使用具有site:stackoverflow.com
条条件的搜索引擎,因为Stack Overflow中的内置搜索功能很弱,并且倾向于忽略Answers,仅偏向于Questions。
例如,执行以下操作:
https://duckduckgo.com/?q=site%3Astackoverflow.com+java+DateTimeFormatter&t=h_&ia=web
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。