SORU
1 EKİM 2010, Cuma


Android/gün Farkı Java Tarih

Aşağıdaki kodu kullanarak geçerli tarihi (biçiminde 12/31/1999 yani GG/AA/yyyy) alıyorum:

Textview txtViewData;
txtViewDate.setText("Today is "  
        android.text.format.DateFormat.getDateFormat(this).format(new Date()));

ve başka bir tarih biçimi: sahip olduğum 2010-08-25 (/aa/gg yani yyyy) ,

gün sayısı tarih arasındaki farkı bulmak istiyorum, belki bir kaç gün sonra fark bulabilirim?

(Diğer bir deyişle, arasındaki farkı bulmak istiyorumGEÇERLİ TARİH yyyy/aa/gg tarih biçimlendirilmiş)

CEVAP
20 HAZİRAN 2011, PAZARTESİ


Bu benim işim, cevap here bulunamadı. yaptım ileride kırık bir link istiyorum :).

Anahtar dikkate alarak, gün ışığı ayarı, Tam Kod ref için bu çizgidir.

TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));

veya daysBetween() parametre olarak TimeZone geçen dene sDate eDate nesneleri setTimeZone() Ara.

Yani burada başlıyor:

public static Calendar getDatePart(Date date){
    Calendar cal = Calendar.getInstance();       // get calendar instance
    cal.setTime(date);      
    cal.set(Calendar.HOUR_OF_DAY, 0);            // set hour to midnight
    cal.set(Calendar.MINUTE, 0);                 // set minute in hour
    cal.set(Calendar.SECOND, 0);                 // set second in minute
    cal.set(Calendar.MILLISECOND, 0);            // set millisecond in second

    return cal;                                  // return the date part
}

() getDatePart here . alınan

/**
 * This method also assumes endDate >= startDate
**/
public static long daysBetween(Date startDate, Date endDate) {
  Calendar sDate = getDatePart(startDate);
  Calendar eDate = getDatePart(endDate);

  long daysBetween = 0;
  while (sDate.before(eDate)) {
      sDate.add(Calendar.DAY_OF_MONTH, 1);
      daysBetween  ;
  }
  return daysBetween;
}

Nüanslar: İki tarih arasındaki farkı bulma iki tarih çıkarma ve sonucu (24 * 60 * 60 * 1000)bölme gibi basit değil. Infact, onun hatalı!

Örneğin:İki tarih arasındaki farkı 03/24/2007 ve 03/25/2007 1 gün olmalıdır; Ancak, yukarıdaki yöntemi kullanarak, İNGİLTERE'DE, 0 Gün alırsınız!

Kendiniz için (kod aşağıda). Milisaniye olacak şekilde yuvarlama hataları neden olacağını ve Yaz Saati resmin içine gelmek gibi küçük bir şey sonra en belirgin hale gelirler.

Tam Kod:

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;

public class DateTest {

public class DateTest {

static SimpleDateFormat sdf = new SimpleDateFormat("dd-MMM-yyyy");

public static void main(String[] args) {

  TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));

  //diff between these 2 dates should be 1
  Date d1 = new Date("01/01/2007 12:00:00");
  Date d2 = new Date("01/02/2007 12:00:00");

  //diff between these 2 dates should be 1
  Date d3 = new Date("03/24/2007 12:00:00");
  Date d4 = new Date("03/25/2007 12:00:00");

  Calendar cal1 = Calendar.getInstance();cal1.setTime(d1);
  Calendar cal2 = Calendar.getInstance();cal2.setTime(d2);
  Calendar cal3 = Calendar.getInstance();cal3.setTime(d3);
  Calendar cal4 = Calendar.getInstance();cal4.setTime(d4);

  printOutput("Manual   ", d1, d2, calculateDays(d1, d2));
  printOutput("Calendar ", d1, d2, daysBetween(cal1, cal2));
  System.out.println("---");
  printOutput("Manual   ", d3, d4, calculateDays(d3, d4));
  printOutput("Calendar ", d3, d4, daysBetween(cal3, cal4));
}


private static void printOutput(String type, Date d1, Date d2, long result) {
  System.out.println(type  "- Days between: "   sdf.format(d1)
                      " and "   sdf.format(d2)   " is: "   result);
}

/** Manual Method - YIELDS INCORRECT RESULTS - DO NOT USE**/
/* This method is used to find the no of days between the given dates */
public static long calculateDays(Date dateEarly, Date dateLater) {
  return (dateLater.getTime() - dateEarly.getTime()) / (24 * 60 * 60 * 1000);
}

/** Using Calendar - THE CORRECT WAY**/
public static long daysBetween(Date startDate, Date endDate) {
  ...
}

ÇIKIŞ:

El - Gün arasına: 01-Oca-2007-02-Oca-2007: 1)

Takvim Günleri arasında: 01-Oca-2007-02-Oca-2007: 1)


- Arasındaki Gün manuel: 24-Mar-2007 ve 25-Mar-2007: 0

Takvim Günleri arasında: 24-Mar-2007 ve 25-Mar-2007: 1)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • chrmoe

    chrmoe

    7 Kasım 2006
  • hans peder sahl

    hans peder s

    22 Temmuz 2009
  • Ownage Pranks

    Ownage Prank

    13 AĞUSTOS 2007