2016-08-09 9 views
0

Мне нужно получить время между двумя датами. Скажем dateStart = 1470712122173 и dateStop = 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 существует. Я думаю, что его smth с diff значением –

ответ

4

Вам необходимо получить основные понятия справа. Когда вы берете разницу между двумя объектами Date, вы получаете продолжительность между двумя точками во времени, пытаясь увидеть разницу, поскольку другой момент времени не имеет смысла.

Вот пример использования Java 8 времени API, чтобы получить разницу между двумя точками во времени (java.time.Instant):

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 

для Android, я не являюсь экспертом , но вы можете проверить 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 seconds еще раз в date экземпляр (в 12 часах) формате, тогда вы получите ответ 12 hr 00 minutes 30 seconds PM. Поэтому, когда вы вычисляете разницу между двумя датами, вы не должны преобразовывать разницу обратно в экземпляр даты.

+0

Спасибо, человек. –

Смежные вопросы