سؤال

لدي سلسلة من رأس البريد الإلكتروني ، مثل Date: Mon, 27 Oct 2008 08:33:29 -0700.ما أحتاجه هو مثيل GregorianCalendar ، من شأنها أن تمثل نفس اللحظة.سهلا كما أنه-كيف أفعل ذلك ؟

و أسرع منها-هذا هو لا سوف تعمل بشكل صحيح:

SimpleDateFormat format = ... // whatever you want
Date date = format.parse(myString)
GregorianCalendar calendar = new GregorianCalendar();
calendar.setTime(date)

لأنه سيتم تطبيع التوقيت UTC (أو المحلية الخاصة بك آلة الزمن ، اعتمادا على نسخة جافا).ما أحتاجه هو التقويم.getTimeZone().getRawOffset() للعودة -7 * milisInAnHour.

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

المحلول

أنصح تبحث في Joda الوقت المكتبة ، إذا كان ذلك خيار.أنا عادة استخدام طرف ثالث المكتبة عند المنصة الأساسية يوفر وظائف مماثلة, ولكن أنا جعلت هذا استثناء لأن المؤلف من Joda الوقت هو أيضا وراء JSR310 ، Joda الوقت ستكون أساسا توالت في جافا 7 في نهاية المطاف.

http://joda-time.sourceforge.net/

على أي حال, إذا Joda الوقت هو خيار شيء مثل هذا يجب أن العمل:

DateTimeFormatter formatter =
    DateTimeFormat.forPattern("your pattern").withOffsetParsed();
DateTime dateTime = formatter.parseDateTime("your input");
GregorianCalendar cal = dateTime.toGregorianCalendar();

آمل أن يساعد هذا.

نصائح أخرى

و أسرع منها-هذا لن تعمل بشكل صحيح ...لأنه سيتم تطبيع التوقيت UTC (أو المحلية الخاصة بك آلة الزمن ، اعتمادا على نسخة جافا).ما أحتاجه هو التقويم.getTimeZone().getRawOffset() للعودة -7 * milisInAnHour.

من الناحية الفنية هذا العمل ، لأنه في حين أنه سيعود كائن مع التوقيت يساوي النظام الحالي التوقيت سيكون الوقت المعدلة لحساب الإزاحة.

هذا الكود:

String dateString = "Mon, 27 Oct 2008 08:33:29 -0700";
DateFormat df = new SimpleDateFormat("E, dd MMM yyyy hh:mm:ss Z");
Date parsed = df.parse(dateString);
System.out.println("parsed date: " + parsed);

Calendar newCalendar = Calendar.getInstance();
newCalendar.setTime(parsed);

النواتج:

تحليل تاريخ:Mon Oct 27 11:33:29 بتوقيت شرق الولايات المتحدة عام 2008

والتي من الناحية الفنية هو الصحيح ، حيث إن نظام التوقيت هو EDT / UTC ناقص أربع ساعات (ثلاث ساعات قبل لك).إذا كنت التعبير عن الوقت عدد المللي ثانية منذ كانون الثاني / يناير 1, 1970, 00:00:00 GMT (الذي هو كيف Date كائن مخازن إنه التاريخ/الوقت) ، ثم هذه التاريخ/مرات متساوية, انها مجرد توقيت مختلف.

المشكلة حقا كيف يمكنني تحويل التاريخ/التقويم في التوقيت ؟ من أجل أن نلقي نظرة على ردي على السؤال السابق كيفية التعامل مع التقويم الزمنية باستخدام جافا ؟

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