0

我想要什么:如何在Android上正确解析从String到DateFormat的联系人生日?

我写,我想找出今天我的联系人都有其生日的应用程序。

我有什么至今:

我已经可以扫描手机的联系人列表,让每个生日为String

的问题是什么:

有三种不同的情况,当谈到生日的DateFormat

  1. 案例:我只知道日月而不是年。在这种情况下,存储的生日String看起来像这样:--MM-dd。我可以通过将String的长度与我定义的SimpleDateFormat进行解析来处理这个问题。
  2. 案例:我也知道这一年。在这种情况下,99%的存储生日String看起来像这样:yyyy-MM-dd。我也可以处理这个。
  3. 案例:我也知道当年,但存储的生日String看起来像这样:dd.MM.yyyy。这个长度与上面的一样长,所以我不能根据长度来区分两者。

我想知道的:

为什么存储不同DateFormat S中的联系人的生日?这取决于Locale?我用德语和英语(美国)Locale进行了测试,结果相同。我还删除并在不同DateFormat(来自案例3)的联系人中添加了生日。他们像以前一样储存。 : - /有没有办法以一种简单而优雅的方式覆盖所有可能的DateFormat s存储生日,而无需创建各种各样的DateFormat s并在循环中检查它们?

由于提前, kaolick

回答

0

我不想回答我自己的问题,但我发现罪恶的根源:

的原因DateFormat的情况下,3很容易解释虽然花了我一段时间来弄明白。这是因为我在我的设备上安装了Skype,这两个联系人在那里进入了他们的生日。但Skype正在使用另一个DateFormat(案例3中的一个)。我查看了日志文件,发现这两个联系人在“常规”联系人应用中也有类似情况2的生日条目。

问题解决! :-D

0

一些简单的基于字符串中的第三个字符,一旦我们知道这不是案件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; 
} 

如果有其他情况下,你将不得不修改这个明显。

+0

不是一个坏主意。但是如果像这样的第四种格式有生日,那么这将不起作用:'MM-dd-yyyy'? – kaolick

+0

有没有办法检查,如果我说我的生日是05-06-1992,如果你不知道我的生日是什么格式,你会怎么知道?可能是6号吗?还是六月五号? – Eluvatar

+0

这就是我的意思!所以我需要一个不同的方法... – kaolick

相关问题