0

我有两个字符串

String withYear = "12/04/1988"

String withoutYear = "10/04"

日期格式为 MM/dd/yyyy

我试图确定一个字符串是否包含一年

到目前为止,这是我的代码:

Calendar c= Calendar.getInstance();
c.setTime(dt.parse(withYear)); //dt is a SimpleDateFormat 'MM/dd/yyyy'
c.get(Calendar.YEAR) // = 1988

c.setTime(dt.parse(withoutYear));
c.get(Calendar.YEAR);// = 1970
4

4 回答 4

4

我认为最简单的方法是完全忘记制作日期/日历对象。您可以简单地检查 String 以查看它有多少个部分:

public static boolean containsYear(String dateStr){
    return dateStr.split("/").length == 3;
}
于 2013-09-30T14:29:20.490 回答
3

您的代码运行良好,当您调用 dt.parse(withoutYear) 时,年份会自动设置为纪元年(1970 年)。

来自 SimpleDateFormat:http ://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html

此解析操作使用日历来生成日期。在解析之前清除日历的所有日期时间字段,并且日历的日期时间字段的默认值用于任何缺少的日期时间信息。例如,如果解析操作没有给出年份值,则使用 GregorianCalendar 解析的 Date 的年份值为 1970。(强调我的)

如果您不希望任何有效的年份值为 1970 年,那么您可以假设指定了 year==1970 的所有日期都没有指定年份。

一个更完整的解决方案是继承 GregorianCalendar 并为字段设置默认值YEAR = -1;

于 2013-09-30T14:32:33.910 回答
2
        String data[] = withYear.split("/");
        String year =null ;
        if(data.length==3){
            year = data[2] ;
            System.out.println(year);
        }
于 2013-09-30T14:28:53.103 回答
0

如果你愿意,你可以使用 YodaTime,它很容易处理时间/日期,更多关于它的信息在这里Yoda time getYear()。您可以尝试解析您的字符串,然后 getYear()。

希望这可以帮助。

于 2013-09-30T15:06:30.543 回答