Benim java'mda (aslında, Android, ama bu konuyla alakasız) proje, kullanıcı bazı etkinlikler için başlangıç ve bitiş zamanı girebilir ve sistem otomatik olarak süreyi hesaplar. Düğmesine basın, geçerli zaman damgasını almak için System.currentTimeMillis()
kullanın.Uzun zaman damgasından saf bir zaman unsuru elde etme
Bu sorunun kapsamı dışındaki nedenlerden ötürü, zaman damgasının tarih bölümünü atmam ve yalnızca bir saati saklamam gerekiyor. Kolay, diye düşündüm, sadece bir günde milisaniye sayısına göre böler ve kalanı atın:
Bu neredeyse eserlong currentTimestamp = System.currentTimeMillis();
long timeOnly = currentTimeStamp % (1000 * 60 * 60 * 24);
- bu zaman damgası bir saat kapalı üretir hariç. İşte bir örnek:
DateFormat timeFormat = DateFormat.getTimeInstance(DateFormat.SHORT, Locale.US);
long currentTimestamp = System.currentTimeMillis();
long timeOnly = currentTimestamp % (1000 * 60 * 60 * 24);
System.out.println("Full value: " + timeFormat.format(currentTimestamp));
System.out.println("Time only: " + timeFormat.format(timeOnly));
Bu kod baskılar:
Full value: 10:53 PM
Time only: 11:53 PM
Full value: 11:19 PM
Time only: 12:19 AM
Sadece damgası itibaren bir saat çıkarma mümkün olmakla birlikte, aslında bu oluyor sebebini anlamak istiyorum.
Emin değilim ... ama sezgilerimin bana saat dilimi ile ilgili bir şey olduğunu söyledi. Şunu kontrol edeyim - şu anda DTS'deyiz ... bu, saati açıklar :). CurrentTimeMillis, bir UNIX zaman damgasıdır (UTC’de hesabınız çalışırdı ...). Geri döneceğim :) – Philipp
Kendimi Birleşik Krallık'ta olduğumu ve henüz DST'de olmadığımızı belirterek değer. 'Locale.UK' –
add 'timeFormat.setTimeZone (TimeZone.getTimeZone (" UTC ")) 'yi kullanırsam, bende aynı sonucu alırım;' ve farkın olmayacak ... bu kesin bir zaman dilimi problemidir :). 'Yerel Ayar' sadece biçimlendirme içindir, saat dilimini değil. – Philipp