2011-02-26 24 views
8

Olası Çoğalt:
How can I increment a date by one day in Java?Artış mevcut tarih

Ben her sahadan aynı tutarken bir gün artırmak için istediğiniz mevcut tarih nesnesi . Tüm örneklerle karşılaştığım saatler/dakikalar/saniyeler ya da yeni bir tarih nesnesi oluşturup alanları aktarmanız gerekiyor. Gün alanını 1'e kadar ilerletmenin bir yolu var mı?

Teşekkür

DÜZENLEME: ben biri tarafından günün değerini artırmak anlamına gelmediğini Üzgünüm, ben ileri gün 1

+0

sayılı tek yolu bugüne kadar 1 gün eklemektir. Nedeni: 31 Mayıs tarih alanını 1 arttırdığınızı varsayalım. Bunu 32 Mayıs yapalım mı? Oysa 1 gün eklerseniz, Java bununla ilgilenir. – Soumya

+1

date.setTime (date.getTime() + 24 * 60 * 60 * 1000) 'gibi bir şey basit kirli bir çözümdür. – maaartinus

+0

/Saat dilimi ile güncel bir tarih belirtilmemişse. – bestsss

cevap

23
Calendar c = Calendar.getInstance(); 
c.setTime(yourdate); 
c.add(Calendar.DATE, 1); 
Date newDate = c.getTime(); 
+1

Gerçekten hoş bir çözüm. Ama aynı zamanda Ocak ayının 31'inci günü ile mi çalışıyor? o zaman ne oldu? –

+4

Gerçekten mi? Tarih artırımı için 4 satırlık kod gerekiyor ?! Bu sadece aptalca. –

5

Date nesne kendisi tarafından ilerlemek anlamına (eğer java.util.Date demek varsayarak) Gün alanı, sadece bir "Unix Epoch'den beri milisaniye" değeri vardır. (. toString() yöntem baskılar bu geçerli yerele bağlı olarak)

Yapmak istediğiniz ne bağlı olarak, prensip iki şekilde vardır:

  • hassas 24 saat verilen sonra" basitçe istiyorsanız tarih ", zaman değerine 1000 * 60 * 60 * 24 milisaniye ekleyebilirsiniz ve bunu ayarlayın. Eğer gün ışığından yararlanma saati arasında bir değişiklik varsa, eski tarihiniz 11:07 ve yeni saat 10:07 veya 12:07 (vardiya yönüne bağlı olarak) olabilir, ama yine de tam 24'tür. saat farkı. "sonraki takvim gününde aynı saatte" sahip olmak istiyorsanız MeBigFatGuy gösterdiğim gibi

    private final static long MILLISECONDS_PER_DAY = 1000L * 60 * 60 * 24; 
    
    /** 
    * shift the given Date by exactly 24 hours. 
    */ 
    public static void shiftDate(Date d) { 
        long time = d.getTime(); 
        time += MILLISECONDS_PER_DAY; 
        d.setTime(time); 
    } 
    
  • , daha iyi bir Takvim'i kullanıyoruz. (Belki de yerel saat dilimi kullanılacak istemiyorsanız de bu getInstance() yöntemini TimeZone vermek istiyorum.)

    /** 
    * Shifts the given Date to the same time at the next day. 
    * This uses the current time zone. 
    */ 
    public static void shiftDate(Date d) { 
        Calendar c = Calendar.getInstance(); 
        c.setTime(d); 
        c.add(Calendar.DATE, 1); 
        d.setTime(c.getTimeInMillis()); 
    } 
    

    Birden böyle tarih manipülasyonlar yapıyorsanız, daha iyi kullanılması doğrudan Takvim nesneyi tekrar ve tekrar Tarih ve Tarih dönüştürmek yerine.

4
org.apache.commons.lang.time.DateUtils.addDays(date, 1); 
İlgili konular