Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/196.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何正确解析联系人';Android上从字符串到日期格式的生日?_Android_Parsing_Date Format_Android Contacts_Simpledateformat - Fatal编程技术网

如何正确解析联系人';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对其进行解析
  • 凯斯:我也知道这一年。在这种情况下,在99%的情况下,存储的生日
    字符串
    如下所示:
    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日?然后您需要指定您正试图找出如何解析这些其他格式。