Calendar.getInstance (টাইমজোন.সেটটাইমজোন ("ইউটিসি")) ইউটিসি সময় ফিরছে না


106

Calendar.getInstance(TimeZone.getTimeZone("UTC"))মেথড কলের সাথে যে ফলাফলটি পাচ্ছি তা নিয়ে আমি সত্যিই বিভ্রান্ত হয়ে পড়েছি , এটি আইএসটি সময় ফিরছে।

আমি যে কোডটি ব্যবহার করেছি তা এখানে

Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());

এবং আমি যে প্রতিক্রিয়া পেয়েছি তা হ'ল:

Sat Jan 25 15:44:18 IST 2014

তাই আমি ডিফল্ট টাইমজোনটিকে ইউটিসিতে পরিবর্তন করার চেষ্টা করেছি এবং তারপরে আমি চেক করেছিলাম, তারপরে এটি ঠিকঠাক কাজ করছে

Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());

TimeZone tz  = TimeZone.getDefault() ;
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Three = Calendar.getInstance();
System.out.println(cal_Three.getTime());
TimeZone.setDefault(tz);

ফলাফল:

Sat Jan 25 16:09:11 IST 2014
Sat Jan 25 10:39:11 UTC 2014

আমি কি এখানে কিছু মিস করছি?

উত্তর:


146

System.out.println(cal_Two.getTime())আবাহন একটি ফেরৎ Dateথেকে getTime()। এটিই এটির Dateজন্য একটি স্ট্রিংয়ে রূপান্তরিত হচ্ছে printlnএবং সেই রূপান্তরটি ISTআপনার ক্ষেত্রে ডিফল্ট সময় অঞ্চল ব্যবহার করবে ।

কাঙ্ক্ষিত টাইমজোনটিতে DateFormat.setTimeZone()মুদ্রণের জন্য আপনাকে স্পষ্টভাবে ব্যবহার করতে হবে Date

সম্পাদনা: @ লরেনার সৌজন্যে, এটি বিবেচনা করুন:

TimeZone timeZone = TimeZone.getTimeZone("UTC");
Calendar calendar = Calendar.getInstance(timeZone);
SimpleDateFormat simpleDateFormat = 
       new SimpleDateFormat("EE MMM dd HH:mm:ss zzz yyyy", Locale.US);
simpleDateFormat.setTimeZone(timeZone);

System.out.println("Time zone: " + timeZone.getID());
System.out.println("default time zone: " + TimeZone.getDefault().getID());
System.out.println();

System.out.println("UTC:     " + simpleDateFormat.format(calendar.getTime()));
System.out.println("Default: " + calendar.getTime());

আমি এক মুহুর্তের জন্য এটি খুঁজছি সম্ভবত শিরোনামটি যথেষ্ট স্পষ্ট নয়? যাইহোক, সহায়তার জন্য ধন্যবাদ
gavard.e

3
আপনি যদি System.out.println এর ফলাফল দেখান তবে আপনি প্রচুর সময় সাশ্রয় করতে পারবেন :)
ভাসিল ভালচেভ

1
আমি এটি পেয়েছি .. ধন্যবাদ .. তবে আমি বুঝতে পারি না কীভাবে টাইমজোন সেটিং করা সরলডেটফর্ম্যাট ক্লাসের দায়িত্ব হবে। টাইমজোন পরিবর্তন করা প্রকৃত সময় পরিবর্তন করে, এটি বিন্যাস নয়। সিম্পলডেট ফরমেটের কাজটি কেবলমাত্র তারিখের ফর্ম্যাট করা,
সময়কে হেরফের


এটি (ফর্ম্যাটারের টাইমজোন সেট করার পরে) প্রতিবার আমাকে পেয়ে যায়, যদিও আমি ক্যালেন্ডারের টাইমজোন সেট করেছি।
আগি হামারথিফ

17

java.util.Dateসময় অঞ্চল থেকে স্বতন্ত্র। আপনি যখন প্রিন্ট cal_Twoযদিও Calendarউদাহরণস্বরূপ তার সময় অঞ্চল সেট পেয়েছে UTC, cal_Two.getTime()একটি ফিরে আসবে Dateউদাহরণস্বরূপ যা সময় অঞ্চল নেই (এবং ডিফল্ট সময় জোন সবসময় হয়)

Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());
System.out.println(cal_Two.getTimeZone());

আউটপুট:

 Sat Jan 25 16:40:28 IST 2014
    sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null] 

জাভাদোক থেকে TimeZone.setDefault()

GetDefault পদ্ধতি দ্বারা ফিরে আসা সময় অঞ্চল সেট করে। যদি অঞ্চলটি শূন্য থাকে, ভিএম প্রথম শুরু করার সময় এটির মূলত মানটিকে ডিফল্টটিকে পুনরায় সেট করুন।

অতএব, আপনার setDefault()আগে স্থানান্তর cal_Twoতাত্ক্ষণিক হয় আপনি সঠিক ফলাফল পাবেন।

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());

Calendar cal_Three = Calendar.getInstance();
System.out.println(cal_Three.getTime());

আউটপুট:

Sat Jan 25 11:15:29 UTC 2014
Sat Jan 25 11:15:29 UTC 2014

6
Calendar currentTime = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
currentTime.set(Calendar.ZONE_OFFSET, TimeZone.getTimeZone("UTC").getRawOffset());
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, currentTime.get(Calendar.HOUR_OF_DAY));
calendar.getTimeInMillis()

আমার জন্য কাজ করছে


5

আপনি অবশ্যই একটি ছোট জিনিস মিস করছেন এবং এটি হ'ল আপনি কোনও ডিফল্ট মান সেট করছেন না:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));

সুতরাং কোডটি দেখতে হবে:

TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
Calendar cal_Two = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
System.out.println(cal_Two.getTime());

ব্যাখ্যা : আপনি যদি সময় অঞ্চলটি পরিবর্তন করতে চান তবে ডিফল্ট সময় অঞ্চলটি ব্যবহার করে সেট করুনTimeZone.setDefault()


0
    Following code is the simple example to change the timezone
public static void main(String[] args) {
          //get time zone
          TimeZone timeZone1 = TimeZone.getTimeZone("Asia/Colombo");
          Calendar calendar = new GregorianCalendar();
          //setting required timeZone
          calendar.setTimeZone(timeZone1);
          System.out.println("Time :" + calendar.get(Calendar.HOUR_OF_DAY)+":"+calendar.get(Calendar.MINUTE)+":"+calendar.get(Calendar.SECOND));

       }

আপনি যদি সময় অঞ্চলগুলির তালিকা দেখতে চান তবে এখানে ফোলিং কোডটি রয়েছে

public static void main(String[] args) {

    String[] ids = TimeZone.getAvailableIDs();
    for (String id : ids) {
        System.out.println(displayTimeZone(TimeZone.getTimeZone(id)));
    }

    System.out.println("\nTotal TimeZone ID " + ids.length);

}

private static String displayTimeZone(TimeZone tz) {

    long hours = TimeUnit.MILLISECONDS.toHours(tz.getRawOffset());
    long minutes = TimeUnit.MILLISECONDS.toMinutes(tz.getRawOffset())
                              - TimeUnit.HOURS.toMinutes(hours);
    // avoid -4:-30 issue
    minutes = Math.abs(minutes);

    String result = "";
    if (hours > 0) {
        result = String.format("(GMT+%d:%02d) %s", hours, minutes, tz.getID());
    } else {
        result = String.format("(GMT%d:%02d) %s", hours, minutes, tz.getID());
    }

    return result;

}

-6

GMTপরিবর্তে ব্যবহার করার চেষ্টা করুন UTC। তারা একই সময় অঞ্চল উল্লেখ করে, তবুও নামটি GMTবেশি সাধারণ এবং সম্ভবত এটি কাজ করে।


জিএমটি ব্যবহার করে একই ফল পাওয়া যাবে।
জিম
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.