如何正确解析联系人';Android上从字符串到日期格式的生日?
我想要什么: 我正在写一个应用程序,我想知道我的哪些联系人今天过生日 到目前为止我拥有的: 我已经可以扫描手机的联系人列表,并将每个生日作为如何正确解析联系人';Android上从字符串到日期格式的生日?,android,parsing,date-format,android-contacts,simpledateformat,Android,Parsing,Date Format,Android Contacts,Simpledateformat,我想要什么: 我正在写一个应用程序,我想知道我的哪些联系人今天过生日 到目前为止我拥有的: 我已经可以扫描手机的联系人列表,并将每个生日作为字符串 问题是什么: 生日的日期格式有三种不同的情况 案例:我只知道日期和月份,但不知道年份。在这种情况下,存储的生日字符串如下所示:--MM dd。我可以通过获取字符串的长度来处理这个问题,并使用我定义的SimpleDataFormat对其进行解析 凯斯:我也知道这一年。在这种情况下,在99%的情况下,存储的生日字符串如下所示:yyyy-MM-dd。我也能
字符串
问题是什么:
生日的日期格式有三种不同的情况
字符串
如下所示:--MM dd
。我可以通过获取字符串的长度来处理这个问题,并使用我定义的SimpleDataFormat对其进行解析
字符串
如下所示:yyyy-MM-dd
。我也能处理这件事dd.MM.yyyy
。这个和上面一样长,所以我不能用长度来区分这两个日期格式存储?这是否取决于区域设置
?我用德语和英语(美国)Locale
测试了它,结果是一样的。我还使用不同的日期格式
(来自案例3)删除并添加了联系人中的生日。它们会像以前一样存储起来。:/是否有一种方法可以轻松优雅地覆盖存储的生日的所有可能的DateFormat
s,而无需创建所有类型的DateFormat
s并循环检查
提前感谢,,
kaolick一个简单的基于字符串中第三个字符的东西,一旦我们知道它不是案例1
private static SimpleDateFormat MMddFormat = new SimpleDateFormat("--MM-dd");
private static SimpleDateFormat ddMMyyyyFormat = new SimpleDateFormat("dd-MM-yyyy");
private static SimpleDateFormat yyyyMMddFormat = new SimpleDateFormat("yyyy-MM-dd");
private Date Format(String dateString) throws ParseException {
// possible formats, --mm-dd, yyyy-mm-dd, dd-mm-yyyy
if (dateString == null || dateString.isEmpty())
return null;
switch (dateString.length()) {
case 7:
return MMddFormat.parse(dateString);
case 8:
return (dateString.charAt(2) == '-' ? ddMMyyyyFormat : yyyyMMddFormat).parse(dateString);
}
return null;
}
如果还有其他情况,你显然必须对此进行修改。我不想回答自己的问题,但我找到了邪恶的根源:
案例3中使用DateFormat
的原因很容易解释,尽管我花了一些时间才弄明白。这是因为我的设备上安装了Skype,这两个联系人在那里过生日。但Skype正在使用另一种日期格式
(案例3中的一种)。我查看了日志文件,发现这两个联系人也有生日条目,如“普通”联系人应用程序中的案例2
问题解决了!:-这主意不错。但是如果有第四种格式的生日,这就行不通了:MM dd yyyy
?无法检查,如果你不知道我的生日是什么格式,你怎么知道我说我的生日是1992年6月5日?是五月六日吗?或者是6月5日?然后您需要指定您正试图找出如何解析这些其他格式。