2016-08-09 2 views
0

두 날짜 사이에 시간이 필요합니다. dateStart = 1470712122173dateStop = 1470712127320이라고 가정 해 보겠습니다. 이 두 날짜의 차이는 5147 과 같으므로이 질문에 답하면 5 초가 걸릴 것으로 예상되지만 19:00:05이 표시됩니다. 이 19 시간은 어디에서 왔습니까? 밀리 초 동안두 날짜의 차이 (Android)

코드 (= 5147) -> 시간 :

private string foo(long dateStart, long dateStop) { 
    long diff = dateStop - dateStart; 
    DateFormat simple = SimpleDateFormat.getTimeInstance(); 
    Date date = new Date(diff); 
    return simple.format(date); 
} 

는 설명 주셔서 감사합니다.

+5

두 시간 지점의 차이점은 다른 시점이 아닙니다. 그것은 기간입니다. –

+0

어쩌면 UTC-5 시간대에 있습니다. 시간 차이에 대해 Joda lib를 사용하거나 초, 분, 초 단위로 계산할 수 있습니다. –

+0

@flkes 나는 +19가있는 시간대가 있다고 생각하지 않습니다. 나는 diff 값을 가진 그것의 간청이 –

답변

4

기본 개념을 올바르게 이해해야합니다. 두 개의 Date 오브젝트 사이에 차이를 만들 때 두 시점 사이의 지속 시간을 얻습니다. 다른 시점이 의미가 없으므로 차이를 확인하려고합니다.

는 다음 시간에 두 점 사이의 차이 (java.time.Instant)를 얻기 위해 자바 8 시간 API를 사용하여 예제 :

import java.time.Duration; 
import java.time.Instant; 

public class TimeDifferenceSample { 

    static Duration diff(Instant start, Instant end) { 
     return Duration.between(start, end); 
    } 

    public static void main(String [] args) { 
     long start = 1470712122173L; 
     long end = 1470712127320L; 

     Duration dur = diff(Instant.ofEpochMilli(start), Instant.ofEpochMilli(end)); 
     System.out.println(dur.getSeconds() + " seconds"); 
    } 
} 

출력 : 안드로이드에 대한

5 seconds 

, 나는 전문가가 아니다 비슷한 기능을 제공하는 The Joda Time Project을 확인할 수 있습니다. 나는 또한 Android verion here을 발견했다.

2
Date date = new Date(5147); 
    //this method has deprecation, just for illustration 
    System.out.println(date.getSeconds()); 

//in java 8 this works 
     LocalDateTime ldate1 = LocalDateTime.ofInstant(Instant.ofEpochMilli(1470712122173l), ZoneId.systemDefault()); 
     LocalDateTime ldate2 = LocalDateTime.ofInstant(Instant.ofEpochMilli(1470712127320l), ZoneId.systemDefault()); 

     System.out.println(Duration.between(ldate1, ldate2).getSeconds()); 
1

당신은 또한 사용할 수 있습니다 java.util.concurrent.TimeUnit

출력

0 : 0 : 5 

코드

import java.util.concurrent.TimeUnit; 

public class HelloWorld { 

    public static void main(String[] args) { 
     long dateStart = 1470712122173l, dateStop = 1470712127320l; 
     long diff = dateStop - dateStart; 

     long diffInSeconds = TimeUnit.MILLISECONDS.toSeconds(diff); 
     long diffInMinutes = TimeUnit.MILLISECONDS.toMinutes(diff); 
     long diffInHours = TimeUnit.MILLISECONDS.toHours(diff); 

     System.out.println(diffInHours + " : " + diffInMinutes + " : " + diffInSeconds); 
    } 
} 

두 날짜 인스턴스의 차이를 계산할 때 실제로 차이가 있습니다. 차이점을 30 seconds으로 가정 해 봅시다.

이제이 30 secondsdate (12 시간 후) 형식으로 다시 변환하면 답변은 이됩니다. 따라서 두 날짜의 차이를 계산할 때 차이를 날짜 인스턴스로 다시 변환해서는 안됩니다.

+0

고마워요. –