javaandroiddatetime

converting a date string into milliseconds in java


Possible Duplicate:
Calculate date/time difference in java

how would a future date such as Sat Feb 17 2012 be converted into milliseconds in java that can then be subtracted from the current time in milliseconds to yield time remaining until that future date.


Solution

  • The simplest technique would be to use DateFormat:

    String input = "Sat Feb 17 2012";
    Date date = new SimpleDateFormat("EEE MMM dd yyyy", Locale.ENGLISH).parse(input);
    long milliseconds = date.getTime();
    long millisecondsFromNow = milliseconds - (new Date()).getTime();
    Toast.makeText(this, "Milliseconds to future date="+millisecondsFromNow, Toast.LENGTH_SHORT).show();
    

    A more difficult technique (that basically does what DateFormat does for you) involves parsing it yourself (this would not be considered best practice):

    String input = "Sat Feb 17 2012";
    String[] myDate = input.split("\\s+");
    int year = Integer.parseInt(myDate[3]);
    String monthString = myDate[1];
    int mo = monthString.equals("Jan")? Calendar.JANUARY :
                 monthString.equals("Feb")? Calendar.FEBRUARY :
                 monthString.equals("Mar")? Calendar.MARCH :
                 monthString.equals("Apr")? Calendar.APRIL :
                 monthString.equals("May")? Calendar.MAY :
                 monthString.equals("Jun")? Calendar.JUNE :
                 monthString.equals("Jul")? Calendar.JULY :
                 monthString.equals("Aug")? Calendar.AUGUST :
                 monthString.equals("Sep")? Calendar.SEPTEMBER :
                 monthString.equals("Oct")? Calendar.OCTOBER :
                 monthString.equals("Nov")? Calendar.NOVEMBER :
                 monthString.equals("Dec")? Calendar.DECEMBER : 0;
    int day = Integer.parseInt(myDate[2]);
    Calendar c = Calendar.getInstance();
    c.set(year, mo, day);
    long then = c.getTimeInMillis();
    Time current_time = new Time();
    current_time.setToNow();
    long now = current_time.toMillis(false);
    long future = then - now;
    Date d = new Date(future);
    //TODO use d as you need.
    Toast.makeText(this, "Milliseconds to future date="+future, Toast.LENGTH_SHORT).show();