2010-07-29 16 views
5

01/01/2100 Java için UTC saatini '2100-01-01 00:00:00' olarak almak istiyorum. "2100-01-01 00:08:00" alıyorum. Herhangi bir fikir, nasıl düzeltilir.Java'da UTC Saati Oluşturma

public Date getFinalTime() { 
    Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("UTC")); 

    DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
    Date finalTime = null; 

    try 
    { 
     finalTime = df.parse("01/01/2100");    
    } catch (ParseException e) 
    { 
     e.printStackTrace(); 
    } 

    calendar.setTime(finalTime); 
    return calendar.getTime(); 
} 

cevap

9

SimpleDateFormat öğesinin saat dilimini de belirtmeniz gerekir - şu anda saat 8: 00 UTF olarak biten yerel saat yerel saati ayrıştırılıyor.

TimeZone utc = TimeZone.getTimeZone("UTC"); 
Calendar calendar = Calendar.getInstance(utc); 

DateFormat df = new SimpleDateFormat("dd/MM/yyyy"); 
df.setTimeZone(utc); 
Date finalTime = null; 

try 
{ 
    finalTime = df.parse("01/01/2100");    
} catch (ParseException e) 
{ 
    e.printStackTrace(); 
} 

calendar.setTime(finalTime); 

zamanki gibi olsa da, ben şahsen çok daha yetenekli genel olarak Joda Time kullanarak öneriyoruz. İsterseniz, örneğinizi Joda Time'a çevirmekten mutluluk duyarım. Ayrıca, calendar.getTime() döndürdüğünüzü görüyorum. Bu, hesapladığınız anda finalTime ile aynıdır.

Son olarak, sadece ParseException'u yakalamak ve olmamış gibi devam etmek çok kötü bir fikirdir. Bunun sadece örnek kod olduğunu ve gerçek metodunuzu yansıtmadığını umuyorum. Benzer şekilde, gerçekten gerçekten başka bir metni ayrıştıracağınızı varsayıyorum - eğer değilseniz, Eyal'in dediği gibi, doğrudan Calendar numaralı yöntemleri çağırmalısınız. (Veya, Joda Time kullanın.)

2

SimpleDateFormat nesnesinin saat dilimini de ayarlamanız gerekir, aksi halde varsayılan saat dilimini varsayar.

Her neyse, sizin durumunuzda yalnızca bir Takvim kullanmak yeterli gibi görünüyor. Tüm alanlar için (yıl, ay, gün, saat vb.) Doğru değerleri ayarlamak için ayarlayıcılarını kullanın ve ardından saati alın.

+0

Eğer OP sadece giriş olarak bir dizgeye sahipse, ayrıştırma işlemini yapmak için yerleşik sınıfları kullanmak kendi başına ayrıştırmak yerine mantıklı olurdu, değil mi? –

+0

@Jon Skeet: Onun bir açıklama olarak değişken bir dizge verildiğini açıklamadan anlamadım. Sabit bir değer olduğunu farz ettim, bir süre sınırını (2100 yıl) ayırdım. –

+0

Sadece bir örnek olduğunu varsaydım - eğer gerçekten metin ayrıştırmak istemiyorsa, SimpleDateFormat'ı kullanmak garip (ve yanlış) olacaktır. –