Java'da geçerli sistem saatinden 4 saat daha az bir Date nesnesini nasıl geri döndürebilirim? basit yollarındanTarihi 4 saat önce alın
cevap
Bir:
Date date = new Date(System.currentTimeMillis() - (4 * 60 * 60 * 1000));
Ancak bu hesaba DST (Daylight Saving Time) almaz. Alternatif Calendar
geçerli:
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -4);
Date date = calendar.getTime();
Ancak bu çok çirkin bir API olduğunu. Alternatif JodaTime geçerli:
DateTime dateTime = new DateTime().minusHours(4);
Date date = dateTime.toDate(); // If you ever need this...
, 4 saatte milisaniye sayısını çıkarmak milisaniye onu dönüştürme bir tarihi geri dönüştürün.
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.HOUR_OF_DAY, -4);
calendar.getTime();
'Calendar.HOUR ', 24 saat tabanlı değil, 12 saat (AM/PM) tabanlı. 'Calendar.HOUR_OF_DAY' istiyorsun. Ayrıca, takvime özgü bir takvimi manuel olarak oluşturmak için 'Takvim # getInstance()' fabrikasının kullanılması tercih edilir. – BalusC
@ ButalC: Düzeltildi. –
kullanın Calendar
nesnesi ve add
yöntemi.
calendar.add(Calendar.HOUR, -4);
http://download.oracle.com/javase/6/docs/api/java/util/Calendar.html
Calendar c = Calendar.getInstance();
c.add(Calendar.HOUR_OF_DAY, -4);
java.util.Date d = c.getTime();
System.out.println(d);
diğer cevaplar doğru bakın ama çağdaş cevabı katkıda bulunmak istiyoruz. Modern çözüm, modern Java tarih ve zaman API'sı olan java.time
'u kullanır.
Instant fourHoursAgo = Instant.now().minus(Duration.ofHours(4));
System.out.println(fourHoursAgo);
Bu sadece basılmış:
2018-01-31T15:22:21.113710Z
sonunda Z
zaman UTC basılmış olduğunu gösterir - eğer olacak UTC sıfır ofset de. Instant
sınıfı, Date
için modern bir yedektir, bu yüzden ona takmanızı tavsiye ederim. Modern API genellikle çalışmak için çok daha güzel, çok daha temiz, çok daha iyi tasarlanmış.
Kütüphane sınıfının sizin için 4 saatlik bir çıkarma işlemini yapmasının avantajlarını lütfen unutmayın: kodun okunması daha açık ve daha az hataya açık. Komik sabitler yok ve okuyucuların doğru olup olmadığını kontrol etmek için zaman ayırmıyorlar.
böyle dönüştürmek, değiştiremez veya değiştirmek istemediğiniz bir miras API kullanırken örneğin, eski usul Date
nesne gerekiyor edin:
Date oldfashionedDate = Date.from(fourHoursAgo);
Bağlantı:Oracle Tutorial trail: Date Time. Tabii internette başka kaynaklar da var, lütfen ara.
Bir dahaki sefere iki kez cevap vermek yerine dupe'ye yakın bir oy verin. – BalusC
Sizin noktanız, @BalusC. Onları tam kopyalar olarak düşünmüş olsaydım (iki cevap arasında büyük bir çakışma var, ama aynı değiller). –
- 1. Tarihi farklı saat dilimine dönüştürme
- 2. Sql sorgulama 1 saat önce seçmek için?
- 3. tarihi Weekday alın - Swift 3
- 4. Saat dilimi ile Joda ile ayrıştırma tarihi
- 5. __soapCall'dan önce SOAP XML'i alın?
- 6. Doktrin tarihi kaydetme geçersiz kılma/kaydetmeden önce
- 7. Zaman Damgası (Bir dakika önce veya Bir saat önce)
- 8. Javascript tarihim geçerli tarihten önce artı 1 saat midir?
- 9. datetime'nin 24 saat önce olduğu tabloya * işaretleyin.
- 10. Strftime çağrılmadan önce saat dilimini nasıl ayarlayabilirim?
- 11. Sistem yerel saat dilimini python olarak alın
- 12. tarihi
- 13. Ekleme Tarihi ve tarihi POSIXct
- 14. Saat dilimi nasıl oluşturulur + DST geçiş tarihi tablosu
- 15. Bir zaman dilimi ile yerel saat dilimine dönüştürme tarihi
- 16. Tarih Saat Seçici - Ayarlama Tarihi ve Saati Ayarlama
- 17. güncelleşme tarihi ve saati
- 18. JavaScript İmleci kullanmadan önce kelime alın
- 19. Saat ve tarihi bir saat diliminden PHP'de bir zaman diliminden diğerine dönüştürün
- 20. Rota kaynakları, ataşmandan önce ayarlandı Laravel 4
- 21. Raylar 4 rspec 3 doğrulamadan önce test
- 22. Günün tarihi ve verilerden 7 gün önce nasıl sorgulanır?
- 23. MySQL n gün önce bir tarih damgası olarak tarihi al
- 24. iOS 8 - Geçerli tarihi DD/AA/YYYY olarak alın
- 25. MomentJS Parse Midnight Local Başlangıç Tarihi Dize
- 26. sqlite android'e tarih ekleme tarihi
- 27. 24-48 saat önce mysql satırlarını nasıl alabilirim?
- 28. tarihi
- 29. Sadece başlangıç tarihi
- 30. NodeTime ile saat dilimi (dize) noktasından (dize) alın
DST neden hesaba katmıyor? –
İlk yöntem işe yaramazsa da, DST * zaman dilimi geçişlerini * hesaba katmadığını söylemek daha iyidir. JodaTime'den bahsetmek için +1. –
@Thor: Çalışma zamanı sırasında, DST'nin son 4 saat içinde etkinleştirilip etkinleştirilmediğini System # currentTimeMillis() 'e dayalı olarak bilmediğinizden, sonuçta ortaya çıkma zamanını riske atabilirsiniz. – BalusC