如何从字符串中获取经过的年份

时间:2015-07-09 10:07:07

标签: java android date calendar

我有字符串日期“3.9.1991”。而且我想知道自那个日期过去了多少年。例如23.如何使用日历或日期实现它?

修改

我一直在尝试这个:

    private String parseVkBirthday(String birthdayString) {

        // 3.9.1991
        SimpleDateFormat formatter = new SimpleDateFormat("d.M.yyyy");
        String formattedDate = null;
        Calendar date = Calendar.getInstance();

        int year = 0;

        try {
            Date currentDate = new Date();
            Date birthdayDate = formatter.parse(birthdayString);

            Log.d(LOG_TAG, "year1 = " + currentDate.getTime() + " year2 = " + birthdayDate.getTime());

            long diff = currentDate.getTime() - birthdayDate.getTime();

            birthdayDate.setTime(diff);

            date.setTime(birthdayDate);

            year = date.get(Calendar.YEAR);

        } catch (ParseException e) {
            e.printStackTrace();
        }

        return "" + year;
    }

但它让我回归1993年。

答案:

有三种方法可以解决这个问题:

1)当codeaholicguy回答时,我们可以使用Joda-Time库(我更喜欢Android)。

2)正如Basil Bourque所回答,我们可以使用ThreeTen-Backport库来使用java 8中的java.time类。

3)我们可以使用Java 8和java.time中的类。

感谢大家。

6 个答案:

答案 0 :(得分:1)

使用SimpleDateFormat库的PeriodJoda-Time,例如:

String pattern = "dd.MM.yyyy";
SimpleDateFormat format = new SimpleDateFormat(pattern);

Date date = format.parse("3.9.1991");
System.out.println(date);
Period period = new Period(date.getTime(), (new Date()).getTime());
System.out.println(period.getYears());

答案 1 :(得分:1)

String fullDate="3.9.1991";
String[] splitDate=fullDate.split(".");
int year=Integer.parseInt(splitDate[2]);
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
int passedYears=currentYear-year;

答案 2 :(得分:1)

Calendar.YEAR可用于在当前日期添加或减去年份,我们将日期和月份添加到日期中。

http://javarevisited.blogspot.in/2012/12/how-to-add-subtract-days-months-years-to-date-time-java.html

示例程序:

import java.util.Calendar;

public class Years {

  public static void main(String[] args) {
    //create Calendar instance
    Calendar now = Calendar.getInstance();

    System.out.println("Current date : " + (now.get(Calendar.MONTH) + 1)
                        + "-"
                        + now.get(Calendar.DATE)
                        + "-"
                        + now.get(Calendar.YEAR));


    //add year to current date using Calendar.add method
    now.add(Calendar.YEAR,1);

    System.out.println("date after one year : " + (now.get(Calendar.MONTH) + 1)
                        + "-"
                        + now.get(Calendar.DATE)
                        + "-"
                        + now.get(Calendar.YEAR));

    //substract year from current date
    now =Calendar.getInstance();
    now.add(Calendar.YEAR,-100);
    System.out.println("date before 100 years : " + (now.get(Calendar.MONTH) + 1)
                        + "-"
                        + now.get(Calendar.DATE)
                        + "-"
                        + now.get(Calendar.YEAR));

  }
}

http://forgetcode.com/Java/1568-Adding-or-Subtracting-Years-to-Current-Date#

答案 3 :(得分:1)

基于example code by xrcwrnJoda-Time 2.8库:

// get the current year with @xrcwm's code
Calendar mydate = new GregorianCalendar();
String mystring = "3.9.1991";
Date thedate = new SimpleDateFormat("d.m.yyyy", Locale.ENGLISH).parse(mystring);
DateTime myDateTime = new DateTime(thedate.getTime()); // joda DateTime object

// get he current date
DateTime currentDateTime = new DateTime();

// get the years value
long years = Years.between(currentDateTime, myDateTime).getYears()

上面的代码应该为您提供正确的值。请注意,此代码可能存在一些语法错误。

作为旁注,Java 8有一个time包,似乎提供了更多相同的功能。

答案 4 :(得分:1)

java.time

Java 8及更高版本中的新java.time package取代了旧的java.util.Date/.Calendar& SimpleTextFormat类。

首先使用新的DateTimeFormatter类解析字符串。不要使用SimpleTextFormat。并阅读文档,因为旧班和新班之间的符号代码可能存在细微差别。

获取今天的日期,计算经过的年份。请注意我们需要一个时区。时区对于确定日期至关重要。例如,比起在蒙特利尔,新的一天早在巴黎就开始了。

Period课程将时间跨度视为与时间线上的任何点无关的年数,月数和天数。

between方法使用日期时间处理常用的“半开”方法。开头是包含,而结尾是独占

java.time的默认格式遵循ISO 8601标准。如果您希望使用不同的日期时间值字符串表示,请应用格式化程序。

String input = "3.9.1991" ;

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("d.M.yyyy") ;
LocalDate then = LocalDate.parse( input, formatter ) ;

ZoneId zone = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( zone ) ;  // Specify time zone to get your locality’s current date.

Period period = Period.between( then , today ) ;
int years = period.getYears() ;

System.out.println( "Between " + then + " and " + today + " is " + years + " years.");
  

在1991-09-03和2015-07-09之间是23年。

约达时间

Android目前缺乏Java 8功能。所以你不能使用java.time。除非ThreeTen-Backport项目(a)支持上面示例中使用的类,(b)在Android上工作(我也不知道)。

或者,您可以使用启发java.time的第三方库Joda-Time。上面代码示例的Joda-Time代码版本非常相似。在这种情况下,java.time和Joda-Time彼此并行,具有相似的类。

答案 5 :(得分:0)

Calendar mydate = new GregorianCalendar();
String mystring = "3.9.1991";
Date thedate = new SimpleDateFormat("d.m.yyyy", Locale.ENGLISH).parse(mystring);
mydate.setTime(thedate);
//breakdown

System.out.println("year   -> "+mydate.get(Calendar.YEAR));

Reference