2014-05-19 1 views
0

두 개의 날짜 문자열이 있는데 그 둘 사이에 몇 초의 차이가 있는지 알고 싶습니다. exp23 인이 특정 예에서초 단위로 시차가 생깁니다. 대답이 잘못되었습니다.

SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss:SSS"); 
Date d1 = null; 
Date d2 = null; 

d1 = sdf.parse(expString); 
d2 = sdf.parse(formattedDate); 


long diff = d1.getTime() - d2.getTime(); 
long exp = diff/1000 % 60; 

:

2014-05-19 16:37:36:690 // formattedDate 
2014-05-19 19:38:00:000 // expString 

는 다음 코드를 사용합니다. 여기에 어떤 문제가 있습니까?

+1

'anything % 60'은 항상 '0'과 '59'사이의 답변을 제공합니다. 너는 무엇을 기대 했는가? – azurefrog

+0

과 업데이트 된 결과는 무엇입니까? 그것은 분명히 당신의 문제의 이유입니다. – BaptisteL

+1

당신은 어떤 대답을 기대 했습니까? 당신이 빼는 날짜 (mod 60)를 보면,'60 - 36.69 = 23.31'이되며, 길이를 '23'으로 바꿉니다. – azurefrog

답변

2

.getTime()은 1970 년 1 월 1 일 00:00:00 GMT 이후의 시간을 밀리 초 단위로 반환합니다. 따라서 diff에는 두 날짜 사이의 시간이 밀리 초 단위로 표시됩니다.

long diff = d1.getTime() - d2.getTime(); 
// diff = 10882310 

여분의 밀리 초가 떨어지는 사용자 정수로 초 단위로 표시됩니다.

long temp = diff/1000; 
// temp = 10823 

그런 다음 모듈은 60 분으로 초를 얻고 분으로 계산 된 초를 무시합니다. 당신이 두 날짜 사이의 초 단위의 총 시간을 원하는 경우에

long exp = temp % 60; 
// exp = 23 

, 당신은 마지막 작업을하고 싶지 않습니다.

+0

그러나 3 시간은 83 초가 아닙니까? – Loolooii

+0

감사합니다. 시간 차이가 보이지 않아 업데이트되었습니다. – Coda17

1

모듈러스 분할을 사용하지 마십시오! 의 JDK에서 TimeUnit 열거를 사용

long diff = d1.getTime() - d2.getTime(); 
long exp = diff/1000; 

더 나은 아직 :

long exp = TimeUnit.MILLISECONDS.toSeconds(d1.getTime() - d2.getTime()); 
1

Joda-Time는 당신이하고자하는 어떤 Seconds 클래스를 제공합니다 그냥 일반 부문를 사용합니다.

Joda-Time 라이브러리에는 시간 범위를 나타내는 클래스 (예 : Duration, IntervalPeriod)가 있습니다. 이 특정 질문에 대해서는 엄격하게 요구하지 않지만 관련 작업에 편리합니다.

다음은 테스트하지 않은 코드입니다.

간편하게 문자열을 엄격한 ISO 8601 형식으로 변환하십시오. SPACE를 T으로 바꿉니다.

String inputStart = "…".replace(" ", "T"); 
// same for stop 

날짜 - 시간 개체를 만듭니다. 해당 문자열을 구문 분석 할 표준 시간대를 명시 적으로 지정하십시오. UTC입니까?

DateTime startDateTime = new DateTime(inputStart, DateTimeZone.UTC); 
// repeat for stop 

long secs = Seconds.secondsBetween(startDateTime, stopDateTime).getSeconds(); 
관련 문제