Android Java SimpleDataFormat异常不正确
例如,我试图确保用户输入了正确的日期格式10/08/2015Android Java SimpleDataFormat异常不正确,java,android,date,Java,Android,Date,例如,我试图确保用户输入了正确的日期格式10/08/2015 try{ SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); d = sdf.parse(date.getText().toString()); }catch(ParseException ex){ Toast.makeText(MainActivity.this,
try{
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
d = sdf.parse(date.getText().toString());
}catch(ParseException ex){
Toast.makeText(MainActivity.this,
"Date format is wrong.", Toast.LENGTH_LONG).show();
return;
}
但它仍然解析大多数错误输入,如111/10/2013或11/109/2013或一些包含字符的输入
另一个问题是如何将dd/mm/yyyy类型的日期转换为NameofMonth day,year字符串
因此,2018年4月1日将转换为2018年4月12日
DateTimeFormatter enteredFormatter = DateTimeFormatter.ofPattern("dd/MM/uuuu");
DateTimeFormatter usDateFormatter = DateTimeFormatter
.ofLocalizedDate(FormatStyle.MEDIUM)
.withLocale(Locale.US);
LocalDate d;
try {
d = LocalDate.parse(date.getText(), enteredFormatter);
System.out.println(d.format(usDateFormatter));
} catch (DateTimeParseException dtpe) {
Toast.makeText(MainActivity.this,
"Date format is wrong.", Toast.LENGTH_LONG).show();
return;
}
从您的问题中获取不正确的日期此代码将捕获java.time.format.DateTimeParseException:Text“111/10/2013”无法在索引2中解析
或java.time.format.DateTimeParseException:Text“11/109/2013”无法在索引5中解析
,因此向用户提供错误消息。给定一个正确的日期字符串,如11/10/2013
,它的打印方式如下:
2013年10月11日
我还没有在Android上测试的一个细节:据我所知,EditText.getText
将返回一个Editable
,它实现了CharSequence
。由于LocalDate.parse
接受CharSequence
,因此可以传递date.getText()
,而不需要.toString()
< >当为观众设置日期时,首先要考虑的是使用java内置的格式化程序来为该听众的区域设置。您所要求的格式与美国地区的MEDIUM
格式一致。我认为这不是巧合。所以一定要好好利用
同时,我利用了java.time
,现代java日期和时间APISimpleDataFormat
是出了名的麻烦和过时。我避开它。现代的API非常好用
问题:我可以在Android上使用java.time吗?
是的,java.time
在较旧和较新的Android设备上运行良好。它至少需要Java6
- 在Java8和更高版本以及更新的Android设备上(我听说是API级别26),现代API是内置的
- 在Java6和Java7中,获取三个后端口,即新类的后端口(三个用于JSR310;请参阅底部的链接)
- 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
导入日期和时间类org.threeten.bp
- 解释如何使用
java.time
- ,其中首先描述了
java.time
- ,java.time的后端口到Java6和Java7(JSR-310为三十)
- ,Android版Three Ten Backport
- ,解释得非常透彻
java.util.Date
,java.util.Calendar
和java.text.SimpleDateFormat
这样麻烦的旧日期时间类现在是遗留的,被班级取代了。大部分java.time功能都在项目中向后移植到Java6和Java7。进一步适应项目中早期的Android。看见