Datetime 如何从Java中的字符串解析不同的日期格式(常见问题)
很多次,我都试图找出如何解析不同的日期格式。在输入上,我们有一些行:Datetime 如何从Java中的字符串解析不同的日期格式(常见问题),datetime,locale,simpledateformat,Datetime,Locale,Simpledateformat,很多次,我都试图找出如何解析不同的日期格式。在输入上,我们有一些行: 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> date
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;
}
}
避免遗留日期时间类
旧的日期
、日历
和SimpleDateFormat
类是糟糕的设计造成的糟糕局面。永远不要使用它们。现在被java.time类取代
解析
第一个测试输入字符串是否等于“null”
接下来,使用简单的LocalDate.parse(“1987-03-23”)
解析第一种格式,并捕获异常。默认情况下会处理标准ISO 8601格式,因此无需指定格式模式
最后,定义一个格式化模式DateTimeFormatter.ofpaten(“dd-MM-uuu”)
并用它进行解析,调用LocalDate.parse(输入,格式化程序)
。异常陷阱
如果所有这些都失败了,那么您将获得意外的输入
生成字符串
一旦您手头有一个LocalDate
对象,使用LocalDate.format
生成一个字符串,其中传递一个DateTimeFormatter
。您可以定义如上所示的格式模式。或者,您可以调用DateTimeFormatter.ofcalizeddate
,让java.time为您自动本地化
搜索堆栈溢出
这已经被讨论过很多次了。在堆栈溢出中搜索这些类名,以查看更多详细信息和代码
我建议使用带有site:stackoverflow.com
标准的搜索引擎,因为stackoverflow中内置的搜索功能很弱,并且倾向于忽略答案,只偏向于问题
例如,请执行以下操作:
关于java.time 该框架内置于Java8及更高版本中。这些类取代了麻烦的旧日期时间类,例如,& 该项目现已启动,建议迁移到类 要了解更多信息,请参阅。并搜索堆栈溢出以获得许多示例和解释。规格是 您可以直接与数据库交换java.time对象。使用兼容的或更高版本。不需要字符串,也不需要
java.sql.*
类
从哪里获得java.time类
- 然后
- 内置的李>
- 标准JavaAPI的一部分,带有捆绑实现
- Java9添加了一些次要功能和修复
- 及
- 大部分java.time功能都在中向后移植到Java6和Java7
-
- 更高版本的Android捆绑包实现了java.time类
- 对于早期的Android(
DateUtil.validDateString(input_line);