2011-01-28 18 views
6

Kullanarak bir SQL SELECT sorgusu için bir dize olarak ayarlamak için 'sabit' bir saat (24 saat biçiminde gece yarısı, yani 00:00:00) oluşturmaya çalışıyorum aşağıdaki ...GregorianCalendar/Takvim ve HOUR alanı tuhaflığını ayarlama

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 

GregorianCalendar todayDate = new GregorianCalendar(); 
Log.d(TAG, "todayDate: " + todayDate.getTime().toString()); 
Log.d(TAG, "formatted todayDate: " + sdf.format(todayDate.getTime())); 
todayDate.clear(Calendar.HOUR); 
todayDate.clear(Calendar.MINUTE); 
todayDate.clear(Calendar.SECOND); 
todayDate.set(Calendar.HOUR, 0); 
todayDate.set(Calendar.MINUTE, 0); 
todayDate.set(Calendar.SECOND, 0); 
Log.d(TAG, "formatted modified todayDate: " + sdf.format(todayDate.getTime())); 

Bu sorun geçerlidir UNLESS şu anki saattir PM. Geçerli saat gece yarısı ve öğlen arasında olduğunda bunu yaparsanız Örneğin,

todayDate: Fri Jan 28 23:34:34 GMT 2011 
formatted todayDate: 2011-01-28 23:34:34 
formatted modified todayDate: 2011-01-28 12:00:00 <- THE hour is 12 not 00 

(yani 00:00:00 -> 11:59:59) daha sonra formatlanmış dizede benim saat doğru olduğunu 00'a ayarlıyorum. Eğer öğleden sonra ve gece yarısından önce herhangi bir zamanda yaparsam saat 12'ye kadar 00 alırım.

Herkes bunu açıklayabilir ve bir düzeltme (veya bir şeyler yapmanın alternatif bir yolu) bulmama yardımcı olabilir mi? ?

cevap

11

Sen API docs itibaren HOUR

todayDate.set(Calendar.HOUR_OF_DAY, 0); 

yerine 0 için HOUR_OF_DAY ayarlamanız gerekir: get için

HOUR Saha sayısı ve sabah veya öğleden sonra saat gösteren seti . HOUR, 12 saatlik saat için kullanılır (0 - 11). Öğlen ve gece yarısı, 12 ile değil, 0 ile temsil edilir. Ör., 10: 04: 15.250'de HOUR, 10'dur.

HOUR_OF_DAY Günün saatini gösteren get ve set için alan numarası. HOUR_OF_DAY, 24 saatlik saat için kullanılır. E.G., 10: 04: 15.250'de HOUR_OF_DAY 22'dir.

+0

Aaargh! Bu kadar basit olduğuna inanamıyorum. Teşekkür ederim. – Squonk

+0

Endişelenme .. :) – armandino

İlgili konular