مشكلة غريبة مع المنطقة الزمنية والتقويم والتبسيط

StackOverflow https://stackoverflow.com/questions/2092340

سؤال

لننظر في الكود التالي:

SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy", Locale.US);
long start = sdf.parse("10:30:00 30/09/2009").getTime();
long end = sdf.parse("10:30:00 30/10/2009").getTime();

Calendar c = Calendar.getInstance(Locale.US);
c.setTimeInMillis(start);
System.out.println("Start = " + c.getTime());
c.setTimeInMillis(end);
System.out.println("  End = " + c.getTime());

عند تشغيل مقتطف الرمز هذا ، لدي الإخراج التالي:

Start = Wed Sep 30 10:30:00 CEST 2009
  End = Fri Oct 30 10:30:00 CET 2009

لماذا أحصل على منطقة زمنية مختلفة؟

لاحظ أنه إذا قمت بتعيين التاريخ الأول في أغسطس والثاني في سبتمبر ، فسيعرض الإخراج نفس المنطقة الزمنية في كلتا الحالتين:

long start = sdf.parse("10:30:00 30/08/2009").getTime();
long end = sdf.parse("10:30:00 30/09/2009").getTime();

سوف يعرض:

Start = Sun Aug 30 10:30:00 CEST 2009
  End = Wed Sep 30 10:30:00 CEST 2009

أنا أستخدم Java 1.6.0_14

هل كانت مفيدة؟

المحلول

CEST هو وقت الصيف في أوروبا الوسطى. هو نفسه CET مع التوفير في ضوء النهار في الواقع.

نصائح أخرى

يمكنك تعيين المنطقة الزمنية الافتراضية

    import java.util.TimeZone;
...        
    TimeZone.setDefault(TimeZone.getTimeZone("UTC"));  // or "Etc/GMT-1"

    SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss dd/MM/yyyy", Locale.US);
    long start = sdf.parse("10:30:00 30/09/2009").getTime();
    long end = sdf.parse("10:30:00 30/10/2009").getTime();

    Calendar c = Calendar.getInstance(Locale.US);
    c.setTimeInMillis(start);
    System.out.println("Start = " + c.getTime());
    c.setTimeInMillis(end);
    System.out.println("  End = " + c.getTime());

استعمال TimeZone.getAvailableIDs() لرؤية جميع الهوية المتاحة.

تعديل: يمكنك أيضًا استخدام SimpletimeZone جديد

    TimeZone.setDefault(new SimpleTimeZone(60 * 60 * 1000, "CET"));

نعم ، يرتبط بوقت توفير النهار. إذا كنت تستخدم منطقة زمنية تتعرف على DST ، فسيتم استخدامها تلقائيًا. يمكنك استخدام GMT على سبيل المثال إذا كنت لا تريد هذا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top