2012-03-19 8 views
2

У меня есть две даты 20-03-2011 и 1-04-2011, хранящиеся как String. Как я могу разобрать это в формате даты и рассчитать разницу между двумя датами?Разница между двумя конкретными датами

+1

Прежде всего, необходимо разобрать их 'date' (поиск' SimpleDateFormat' на SO) и просто вычесть 'Date.getTime()'. Результат - в миллисекундах. –

+0

@TomaszNurkiewicz – rak

+0

@TomaszNurkiewicz Я пробовал приведенный ниже код, но показывает ошибку как непревзойденную дату.DateFormat formatter; \t \t \t \t \t \t \t \t \t \t Дата date1; \t \t \t \t \t \t \t \t \t \t Дата date2; \t \t \t \t \t \t \t \t \t \t форматировщик = новый SimpleDateFormat ("дд/МММ/гг"); \t \t \t \t \t \t \t \t \t \t попробовать { \t \t \t \t \t \t \t \t \t \t \t date1 = (дата) форматировщик.синтаксический анализ (LeaveStartDate); \t \t \t \t \t \t \t \t \t \t \t System.out.println ("date1 --------" + date1); \t \t \t \t \t \t \t \t \t \t} задвижка (ParseException е) {\t \t \t \t \t \t \t \t \t \t \t // TODO автоматическая генерация улова блока \t \t \t \t \t \t \t \t \t \t \t e.printStackTrace(); \t \t \t \t \t \t \t \t \t \t – rak

ответ

0

использование функции синтаксического анализа в java.text.DateFormat

1

Парсинг объясняется здесь: Parse A Java Date

и вычисляя различия здесь: https://stackoverflow.com/a/3100373/66686

+0

Способ вычисления diff по этой ссылке замедляется - никогда не догадался, что кто-то будет использовать цикл while для DateDiff. Итак - это намного лучше, используя любой из ответов, доступных на этой странице. – kape123

4

Следующая одно решение, поскольку существует множество способов, которыми мы можем достичь этого:

import java.util.*; 
int syear = 2000; 
int eyear = 2000; 
int smonth = 2;//Feb 
int emonth = 3;//Mar 
int sday = 27; 
int eday = 1; 
Date startDate = new Date(syear-1900,smonth-1,sday); 
Date endDate = new Date(eyear-1900,emonth-1,eday); 
int difInDays = (int) ((endDate.getTime() - startDate.getTime())/(1000*60*60*24)); 
+0

Спасибо за помощь ... – rak

+0

добро пожаловать. –

1

Вы можете использовать joda-time:

public void diff(String str1, String str2) 
    { 
     DateTimeFormatter FMT = DateTimeFormat.forPattern("dd-mm-yyyy"); 
     final DateTime dt1 = new DateTime(FMT.parseDateTime(str1)); 
     final DateTime dt2 = new DateTime(FMT.parseDateTime(str2)); 
     Days days = Days.daysBetween(dt1, dt2); 
    } 
0

Попробуйте это:

long getDateDiff(String str1, String str2) throws ParseException { 

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd-MM-yyyy"); 
    Date date1 = simpleDateFormat.parse(str1); 
    Date date2 = simpleDateFormat.parse(str2); 

    return date2.getTime() - date1.getTime(); 
} 
0

Это небольшая программа, которую я сделал на скорую руку, чтобы показать, как вы можете сделать это. Остерегайтесь, однако, он может содержать ошибки, поскольку я тестировал его только с нескольких дат примера.

Вы должны всегда тщательно протестировать любой код, содержащий расчеты даты, поскольку Java API для выполнения всего этого материала очень неуклюж, и всегда, кажется, создает багги-код. Когда это возможно, используйте более удобный интерфейс даты и времени, например JodaTime, что и используется на моем рабочем месте.

 

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Calendar; 
import java.util.Date; 

public class DateFun { 

    public static void main(String[] args) throws ParseException { 
     String dateOne = "20-03-2011 06:44:03 GMT"; 
     String dateTwo = "25-03-2011 23:12:59 GMT"; 
     String format = "dd-MM-yyyy HH:mm:ss z"; 
     System.out.println(getDiff(parseDateString(format, dateTwo), 
        parseDateString(format, dateOne))); 
     dateOne = "20-03-2011 GMT"; 
     dateTwo = "1-04-2011 GMT"; 
     format = "dd-MM-yyyy z"; 
     System.out.println(getDiff(parseDateString(format, dateOne), 
        parseDateString(format, dateTwo))); 
    } 

    private static Calendar parseDateString(final String format, 
        final String date) throws ParseException { 
     final Date parsed = new SimpleDateFormat(format).parse(date); 
     final Calendar cal = Calendar.getInstance(); 
     cal.setTime(parsed); 
     return cal; 
    } 

    private static TimeDiff getDiff(final Calendar calOne, final Calendar calTwo) { 
     return new TimeDiff(Math.abs(calOne.getTimeInMillis() - calTwo.getTimeInMillis())); 
    } 

    private static class TimeDiff { 
     private static final long MS_IN_SECOND = 1000; 
     private static final long MS_IN_MINUTE = MS_IN_SECOND * 60; 
     private static final long MS_IN_HOUR = MS_IN_MINUTE * 60; 
     private static final long MS_IN_DAY = MS_IN_HOUR * 24; 
     private final long days; 
     private final long hours; 
     private final long minutes; 
     private final long seconds; 
     private final long milliseconds; 
     TimeDiff(final long msDiff) { 
     long msRemainder = msDiff; 
     days = msRemainder/MS_IN_DAY; 
     msRemainder = msRemainder - (days * MS_IN_DAY); 
     hours = msRemainder/MS_IN_HOUR; 
     msRemainder = msRemainder - (hours * MS_IN_HOUR); 
     minutes = msRemainder/MS_IN_MINUTE; 
     msRemainder = msRemainder - (minutes * MS_IN_MINUTE); 
     seconds = msRemainder/MS_IN_SECOND; 
     msRemainder = msRemainder - (seconds * MS_IN_SECOND); 
     milliseconds = msRemainder; 
     } 

     @Override 
     public String toString() { 
     return "TimeDiff[days: " + days + ", hours: " + 
        hours + ", minutes: " + minutes + 
        ", seconds: " + seconds + ", milliseconds: " + 
        milliseconds + "]"; 
     } 
    } 
} 
 

Если кто-то видит ошибку в этом, дайте мне знать.

0

Пожалуйста, попробуйте ниже код:

public void compareDate(String date1, String date2){ 
     SimpleDateFormat format = new SimpleDateFormat("dd-MM-yyyy"); 
    Calendar calendar1 = Calendar.getInstance(); 
    Calendar calendar2 = Calendar.getInstance(); 
    calendar1.setTime(format.parse(date1)); 
    calendar2.setTime(format.parse(date2)); 
    long milliseconds1 = calendar1.getTimeInMillis(); 
    long milliseconds2 = calendar2.getTimeInMillis(); 
    long diff = milliseconds2 - milliseconds1; 
    long diffSeconds = diff/1000; 
    long diffMinutes = diff/(60 * 1000); 
    long diffHours = diff/(60 * 60 * 1000); 
    long diffDays = diff/(24 * 60 * 60 * 1000); 
    System.out.println("\nThe Date Different Example"); 
    System.out.println("Time in milliseconds: " + diff+ " milliseconds."); 
    System.out.println("Time in seconds: " + diffSeconds+ " seconds."); 
    System.out.println("Time in minutes: " + diffMinutes + " minutes."); 
    System.out.println("Time in hours: " + diffHours + " hours."); 
    System.out.println("Time in days: " + diffDays + " days."); 
}