2013-09-04 2 views
0

특정 날짜와 현재 시간의 차이를 계산하고 싶습니다.두 날짜의 차이를 계산 한 후 잘못된 시간 받기

int month = 9; 
int day = 17; 
int year = 2013; 

Calendar date = new GregorianCalendar(year, month, day); 

int miliseconds= (int) (System.currentTimeMillis() - calendar.getTimeInMillis()); 

System.out.println(msToString(second)); 

String msToString(int ms) { 
    return (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS")).format(new Date(ms)); 
} 

출력

13091-13091 /인가? D/GTA : 1970-01-08 15 : 00 : 20.287

남은 일, 시간, 분 및 초를 가져오고 싶습니다.

무엇이 잘못 되었나요?

+0

은 'second'밀리 초가 아닙니다. –

+0

확실히 처음 몇 초 였지만 변수를 변경하지 않았습니다. –

답변

1

사용 Joda Time library
Period 클래스가 도움이 될 수 있습니다.

int month = 9; 
    int day = 17; 
    int year = 2013; 
    int hour= 0; 
    int minute =0; 
    int second =0; 
    int millisecond = 0; 

    DateTime dt1 = new DateTime(); //now 
    DateTime dt2 = new DateTime(year, month, day, hour, minute, second, millisecond); 

    //assuming dt1 is before dt2: 
    Period period = new Period(dt1, dt2, PeriodType.dayTime()); 

    /* 
    periodType.dayTime()): 
    Gets a type that defines all standard fields from days downwards. 

     days 
     hours 
     minutes 
     seconds 
     milliseconds 
    */ 

    PeriodFormatter periodFormatter = new PeriodFormatterBuilder() 
      .printZeroAlways() 
      .minimumPrintedDigits(2) 
      .appendDays().appendSuffix("days ") 
      .appendHours().appendSuffix("hours ") 
      .appendMinutes().appendSuffix("minutes ") 
      .appendSeconds().appendSuffix("seconds "); 
      .toFormatter(); 

    System.out.println(periodFormatter.print(period)); 
+0

thx, 나를 위해 일한다. :) –

0

변수 second 변수는 새로운 날짜가 아니라 두 날짜 사이의 밀리 초 양을 보유합니다. 예를 들어,이 밀리 초를 사용하여 일일 계산을 수행해야합니다.

은 당신이 뭔가를 할 수 있습니다 :

int minutes = second/1000/60; // millis to seconds, seconds to minutes 

등등 다음 분의 양을 얻을 시간 변환하고.

+0

이제 이름을 miliseconds로 바꿉니다. 그래, 그게 바로 내가 뭘 원하는지, 밀리 초 단위의 시간과 그 다음에 읽을 수있는 형식으로 변환하고 싶습니다 : day : hour : minute : second 내 변환기 기능으로 수행합니다 –

+0

그래서 위에서 쓴 것처럼 계산을 할 수 있습니다. 그러나 각 계산에서 나머지를 캡쳐합니다. – Mauren

+0

나는이 문제가 변환 자체가 아니었지만 두 날짜 사이의 시간차를 계산한다고 생각한다. –

3

당신은 당신이 찾고있는 출력을 제공해야합니다 다음과 같은 방법

import java.util.Calendar; 
import java.util.GregorianCalendar; 


public class TimeToGoCalculator { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 

     int month = 8; 
     int day = 19; 
     int year = 2013; 

     Calendar calendar = new GregorianCalendar(year, month, day); 

     int timeToGo = (int) (calendar.getTimeInMillis() - System.currentTimeMillis())/1000; 

     System.out.println(secondsToString(timeToGo));  
    } 

    private static String secondsToString(int seconds) { 

     int days = seconds/24/3600; 
     int hours = (seconds - (days * 24 * 3600))/3600; 
     int minutes = (seconds - (days * 24 * 3600 + hours * 3600))/60; 
     seconds = (seconds - (days * 24 * 3600 + hours * 3600 + minutes * 60)); 

     return "The remaining time is "+days+" days, "+hours+" hours, "+minutes+ 
       " minutes, and "+seconds+" seconds."; 
    } 

} 

뭔가를 시도 할 수 있습니다. GregorianCalendar 개체를 만들 때 월은 0으로 인덱싱되므로 9 월은 8이됩니다.

1

외부 라이브러리를 사용할 수 있습니까? 그러면 조다 타임 (Joda Time), 특히 Period class을 도와 줄 수 있습니다.

두 개의 시간 인스턴트에 대한 생성자가 있으며 년/월/일/시간/초/밀리 초의 시간 간격을 제공합니다.

+0

그래, 지금은 사용 중이다.) –

관련 문제