سؤال

لقد كتبت هذا الرمز لتحويل تاريخ ووقت النظام الحالي إلى منطقة زمنية أخرى.لا أتلقى أي خطأ ولكني لا أحصل على مخرجاتي كما هو متوقع.مثل إذا قمت بتنفيذ برنامجي في وقت معين ..مخرجاتي هي ::

الوقت الحالي في الهند يكون :: Fri Feb 24 16:09:23 IST 2012

التاريخ والوقت في :: الوقت القياسي المركزي يكون :: Sat Feb 25 03:39:23 IST 2012

والوقت الفعلي حسب المنطقة الزمنية CST يكون ::

Friday, 24 February 4:39:16 a.m(GMT - 6:00)

لذلك هناك بعض الفجوة الزمنية.وأنا لا أعرف لماذا يحدث هذا.سيكون موضع تقدير أي مساعدة..الكود هو ::

package MyPackage;

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;

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

public class Temp2 {


    public static void main(String[] args) {

        try {
            Calendar currentdate = Calendar.getInstance();
            String strdate = null;
            DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
            strdate = formatter.format(currentdate.getTime());
            TimeZone obj = TimeZone.getTimeZone("CST");

            formatter.setTimeZone(obj);
            //System.out.println(strdate);
            //System.out.println(formatter.parse(strdate));
            Date theResult = formatter.parse(strdate);

            System.out.println("The current time in India is  :: " +currentdate.getTime());

            System.out.println("The date and time in :: "+ obj.getDisplayName() + "is ::" + theResult);
        } catch (ParseException e) {
           e.printStackTrace();
        }
    }
}
هل كانت مفيدة؟

المحلول

إنه عبر الويب.يمكن أن يكون جوجل.على أي حال، هنا نسخة لك (تم اختيارها وتعديلها بلا خجل من هنا):

Calendar calendar = Calendar.getInstance();
TimeZone fromTimeZone = calendar.getTimeZone();
TimeZone toTimeZone = TimeZone.getTimeZone("CST");

calendar.setTimeZone(fromTimeZone);
calendar.add(Calendar.MILLISECOND, fromTimeZone.getRawOffset() * -1);
if (fromTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, calendar.getTimeZone().getDSTSavings() * -1);
}

calendar.add(Calendar.MILLISECOND, toTimeZone.getRawOffset());
if (toTimeZone.inDaylightTime(calendar.getTime())) {
    calendar.add(Calendar.MILLISECOND, toTimeZone.getDSTSavings());
}

System.out.println(calendar.getTime());

نصائح أخرى

خطأك هو الاتصال parse بدلاً من format.

أنت أتصل parse لتحليل تاريخ من سلسلة، ولكن في حالتك لديك تاريخ وتحتاج إلى تنسيقه باستخدام المنطقة الزمنية الصحيحة.

استبدل الكود الخاص بك بـ

Calendar currentdate = Calendar.getInstance();
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ss");
TimeZone obj = TimeZone.getTimeZone("CST");
formatter.setTimeZone(obj);
System.out.println("Local:: " +currentdate.getTime());
System.out.println("CST:: "+ formatter.format(currentdate.getTime()));

وأتمنى أن تحصل على الناتج الذي تتوقعه.

يعد التعامل مع التواريخ في Java في عملي اليومي مهمة غير تافهة.أقترح عليك استخدام جودا تايم مما يبسط أيام البرمجة لدينا ولا يتعين عليك "إعادة اختراع العجلة".

يمكنك فقط استخدام "CST6CDT"لأنه في بعض البلدان يتبعون CDT في الصيف وCST في الشتاء

 public static String getDateInCST() {
             Calendar calendar = Calendar.getInstance();
             DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
             formatter.setTimeZone(TimeZone.getTimeZone( "CST6CDT"));
             String strdate = formatter.format(calendar.getTime());
             TimeZone.getAvailableIDs();
             return strdate;
     }

المشكلة هي عند طباعة تاريخ الكائن الذي يتم الاتصال به toString الطريقة وسيتم الطباعة في المنطقة الزمنية الافتراضية لجهازك.جرب هذا الكود ولاحظ الفرق.

Calendar currentdate = Calendar.getInstance();
String strdate = null;
DateFormat formatter = new SimpleDateFormat("dd-MM-yyyy HH:mm:ssz");
strdate = formatter.format(currentdate.getTime());
System.out.println("strdate=>" + strdate);
TimeZone obj = TimeZone.getTimeZone("CST");

formatter.setTimeZone(obj);
strdate = formatter.format(currentdate.getTime());
Date theResult = formatter.parse(strdate);

System.out.println("The current time in India is  :: " +currentdate.getTime());

System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + theResult);
System.out.println("The date and time in :: " + obj.getDisplayName() + "is ::" + strdate);
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top