Di aplikasi Android saya memiliki penghitung waktu mundur untuk menampilkan waktu yang tersisa dalam game. Ini berfungsi dengan baik, tetapi ketika saya ingin mendapatkan waktu dalam milidetik untuk beberapa alasan itu selalu memberi saya satu menit penuh.

Untuk menjelaskan, saya memiliki Waktu dalam basis data dan saya mengurangi waktu saat ini, namun selalu memberi saya angka bulat, selalu menit penuh sehingga detik saya tidak pernah baik-baik saja. Ini kodenya

setTimeLeftInMilliseconds(calendarEnd.getTimeInMillis() - Calendar.getInstance().getTimeInMillis());

CalendarEnd selalu sama, tetapi saya ingin yang terbaru melihat berapa banyak waktu yang tersisa.

Contoh keluaran: 429780000 429780000 429780000

Itu semua untuk menit yang sama tetapi saya tidak mendapatkan detik

0
MaksimusLapis 4 Januari 2021, 20:28

3 jawaban

Jawaban Terbaik

Itu mudah:

Instant start = Instant.parse("2017-10-03T10:15:30.00Z");
Instant end = Instant.parse("2017-10-03T10:16:30.00Z");
        
Duration duration = Duration.between(start, end);
3
devfoFikiCar 5 Januari 2021, 10:59

Tl; dr

java.time.Duration.between( 
    Instant.ofEpochMilli( then ) , 
    Instant.now() 
)

java.time

Anda menggunakan kelas tanggal-waktu yang buruk yang digantikan oleh kelas java.time modern.

Rupanya Anda ingin bekerja dengan hitungan milidetik sejak titik referensi Epoch momen pertama tahun 1970 di UTC, 1970-01-01T00:00Z. Untuk itu, gunakan kelas Instant.

long now = Instant.now().toEpochMilli() ;

Hitung waktu yang telah berlalu sebagai hitungan milidetik.

long elapsed = ( now - then ) ;

Lebih baik bekerja dengan objek Instant untuk menentukan Duration.

Duration elapsed = Duration.between( Instant.ofEpochMilli( then ) , Instant.now() ) ;

Anda dapat meminta seluruh durasi sebagai hitungan milidetik.

long elapsedMillis = elapsed.toMillis() ;
1
Basil Bourque 4 Januari 2021, 18:59

Saya tidak yakin apakah itu logika yang tepat untuk pergi ke sana. Pengurangan dua nilai Long, dalam hal ini, waktu dalam milidetik, bukanlah yang seharusnya Anda lakukan. Ada pilihan untuk menemukan perbedaan antara dua tanggal dalam hitungan detik, menit, dll. Gunakan ini untuk menunjukkan waktu Anda yang tersisa.

Periksa kode ini, yang dapat Anda sederhanakan karena Anda tidak harus menggunakan semuanya di sini:

DateTimeUtils obj = new DateTimeUtils();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("dd/M/yyyy hh:mm:ss");

try {
    Date date1 = simpleDateFormat.parse("10/10/2013 11:30:10");
    Date date2 = simpleDateFormat.parse("13/10/2013 20:35:55");

    obj.printDifference(date1, date2);

} catch (ParseException e) {
    e.printStackTrace();
}

//1 minute = 60 seconds
//1 hour = 60 x 60 = 3600
//1 day = 3600 x 24 = 86400
public void printDifference(Date startDate, Date endDate) { 
    //milliseconds
    long different = endDate.getTime() - startDate.getTime();

    System.out.println("startDate : " + startDate);
    System.out.println("endDate : "+ endDate);
    System.out.println("different : " + different);

    long secondsInMilli = 1000;
    long minutesInMilli = secondsInMilli * 60;
    long hoursInMilli = minutesInMilli * 60;
    long daysInMilli = hoursInMilli * 24;

    long elapsedDays = different / daysInMilli;
    different = different % daysInMilli;

    long elapsedHours = different / hoursInMilli;
    different = different % hoursInMilli;

    long elapsedMinutes = different / minutesInMilli;
    different = different % minutesInMilli;

    long elapsedSeconds = different / secondsInMilli;

    System.out.printf(
        "%d days, %d hours, %d minutes, %d seconds%n", 
        elapsedDays, elapsedHours, elapsedMinutes, elapsedSeconds);
}

Keluaran:

startDate : Thu Oct 10 11:30:10 SGT 2013
endDate : Sun Oct 13 20:35:55 SGT 2013
different : 291945000
3 days, 9 hours, 5 minutes, 45 seconds

Untuk mendapatkan tanggal Anda, Anda cukup menggunakan

Date endDate = simpleDateFormat.format(new Date(calendarEnd.getTimeInMillis()));
Date currentDate = simpleDateFormat.format(new Date(Calendar.getInstance().getTimeInMillis()));
0
SlothCoding 4 Januari 2021, 18:56