কীভাবে অ্যান্ড্রয়েড মোবাইল থেকে টাইমজোন পাবেন?


139

আমি একটি বোতামে ক্লিক করার সময় অ্যান্ড্রয়েড মোবাইল থেকে সময় অঞ্চল পেতে চাই।


11
টাইমজোন tz = টাইমজোন.জেটডিফল্ট (); স্ট্রিং gmt1 = টাইমজোন.সেটটাইমজোন (tz.getID ())। GetDisplayName (মিথ্যা, টাইমজোন.SHort) স্ট্রিং gmt2 = টাইমজোন.সেটটাইমজোন (tz.getID ())। GetDisplayName (মিথ্যা, টাইমজোন.লং); লগ.ডি ("ট্যাগ", "টাইমজোন:" + জিএমটি 1 + "\ টি" + জিএমটি 2); এবং এটি কোড
ভি

10
আশা ভি নিয়ে আমি এতটা রুক্ষ হব না। আমি কেবল একই জিনিসটি খুঁজছিলাম এবং আমি যে উত্তরগুলি পেয়েছি সেগুলি এইগুলির চেয়ে আলাদা ছিল। প্রকৃতপক্ষে "টাইমজোন.জিটডিফল্ট" দ্বারা অনুসন্ধান করা আমাকে এখানে নিয়ে গেছে।
ইয়ার

উত্তর:


189

আপনি কি ব্যবহার করার চেষ্টা করেছেন TimeZone.getDefault():

বেশিরভাগ অ্যাপ্লিকেশনগুলি টাইমজোন.জেটডিফল্ট () ব্যবহার করবে যা প্রোগ্রামটি যে অঞ্চলের চলমান সময় অঞ্চলের উপর ভিত্তি করে একটি সময় অঞ্চল দেয়।

তথ্যসূত্র: http://developer.android.com/references/java/util/TimeZone.html


22
আপনি যদি জোডটাইম ব্যবহার করছেন , আপনি নিম্নলিখিতটির সাথে একটি ডেটটাইমজোন পেতে পারেন:DateTimeZone.forTimeZone(TimeZone.getDefault());
জোশুয়া পিন্টার

@ জোশপিন্টার আমি কোন প্যাকেজটি ব্যবহার করব, এটি একটি android.icu.utils বা java.util- এ?
নিয়ন ওয়ার্জ

1
আমি ডিভাইস থেকে টাইম অঞ্চলটি সিএসটি-তে পরিবর্তন করেছি, এটি আমাকে সিএসটি ফিরিয়ে দিচ্ছে না। ডিভাইসের সময় অঞ্চল পাওয়ার কোনও উপায় আছে কি?
অভিনব সাক্সেনা

আমি ভাবছি, যদি আমরা কোনওভাবে ডিভাইসের টাইমজোনটিকে নকল করি তবে কি টাইমজোন.জেট ডেফল্ট কার্যকর হয়? এটি অ্যান্ড্রয়েড সিমুলেটারে নেই বলে মনে হচ্ছে।
হাউ লুউ

@ নিওন ওয়ার্জ উভয়ই কাজ করবে, যদিও অ্যান্ড্রয়েড.ইকু কেবলমাত্র 24 এবং ততোধিকের জন্য কাজ করে।
নিকোলাস

136
TimeZone tz = TimeZone.getDefault();
System.out.println("TimeZone   "+tz.getDisplayName(false, TimeZone.SHORT)+" Timezon id :: " +tz.getID());

আউটপুট:

টাইমজোন GMT + 09: 30 টাইমজোন আইডি :: অস্ট্রেলিয়া / ডারউইন


@ ফ্লেক্স কীভাবে অ্যান্ড্রয়েড ডিভাইস থেকে টাইমস্ট্যাম্প পাবেন
KOUSIK daniel

4
আউটপুট সহ দুর্দান্ত ব্যাখ্যা
আনন্দ সাবজনী


14

আমার প্রয়োজন অফসেট যে না শুধুমাত্র অন্তর্ভুক্ত দিনের আলোর সঞ্চয়ী সময় কিন্তু একটি হিসাবে numerial । কেউ কোডটির সন্ধানের ক্ষেত্রে আমি কোডটি ব্যবহার করেছি এটি এখানে।

আমি "3.5" (3:30 ') এর একটি প্রতিক্রিয়া পেয়েছি যা শীতকালে ইরানের তেহরানে এবং গ্রীষ্মের জন্য "4.5" (4:30') প্রত্যাশা করব ।

আমার এটি স্ট্রিং হিসাবেও প্রয়োজন ছিল যাতে এটি এটি একটি সার্ভারে পোস্ট করতে পারি যাতে আপনার শেষ লাইনের প্রয়োজন নাও হতে পারে।

কারেন্ট সময় অঞ্চল পাওয়ার জন্য:

TimeZone tz = TimeZone.getDefault();
Date now = new Date();
//Import part : x.0 for double number
double offsetFromUtc = tz.getOffset(now.getTime()) / 3600000.0;
String m2tTimeZoneIs = Double.parseDouble(offsetFromUtc);

1
এটি আমার পক্ষে কাজ করেছিল যেহেতু আমি কেবল সময়কালগুলি (স্টপওয়াচ হিসাবে) নিয়ে কাজ করছি।
আহসান

13

এই কোডটি ব্যবহার করে দেখুন-

Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();

এটি ব্যবহারকারীর নির্বাচিত টাইমজোনটি ফিরিয়ে দেবে।


4
এর Calendarজন্য একটি অবজেক্ট তৈরি করা একটি বাজে কথা। এই ধরণের অবজেক্ট তৈরি করা ব্যয়বহুল। TimeZone.getDefault()এটি পাওয়ার উপযুক্ত উপায়।
বেনামে

3
@ কেআরএলএক্স_রোলার দয়া করে উত্তর কমিয়ে দেওয়ার আগে সাবধানতার সাথে চেক করুন। আমি আমার উত্তরটি ব্যবহারকারীকে নির্বাচিত টাইমজোনকে রিটিত করেছি যেখানে টাইমজোন.সেটডেফল্ট () ইনস্টলেশন ডিফল্ট সময় অঞ্চলটি ফিরিয়ে দেবে। আরও তথ্যের জন্য দয়া করে কোড . google.com/p/android/issues/detail?id=2037
অনুজপ্রশার

আপনার কোডটি অ্যান্ড্রয়েড ৪.২ এ টাইমজোন.জেট ডেফল্ট () এর মতো একই সময় অঞ্চলটি ফেরত দেয়। টাইমজোন.জেটডিফল্ট () সেটিংস -> তারিখ এবং সময়গুলিতে নির্বাচিত টাইমজোনটি ফিরিয়ে দেবে।
ব্যবহারকারী 1088166


3

সিম্পল ডেট ফরম্যাটের সর্বাধিক সলিউশন: সিম্পলডেট ফরম্যাট ("ZZZZZ"):

 Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT"),
                Locale.getDefault());
        Date currentLocalTime = calendar.getTime();

        DateFormat date = new SimpleDateFormat("ZZZZZ",Locale.getDefault());
        String localTime = date.format(currentLocalTime);
        System.out.println(localTime+ "  TimeZone   " );

==> আউটপুট: +05: 30


2

Http://developer.android.com/references/android/text/format/Time.html অনুসারে ডিভাইসের বর্তমান টাইমজোনটি পুনরুদ্ধার করতে আপনার টাইম.জেটকন্ট্রেন্টটাইমজোন () ব্যবহার করা উচিত।


3
দুর্দান্ত, তবে এপিআই স্তরের 22 থেকে
প্রত্যাখ্যান করা হয়েছে

2

জাভা.টাইম এবং থ্রিটেনএবিপি থেকে জোনআইড

আধুনিক উত্তর:

    ZoneId zone = ZoneId.systemDefault();
    System.out.println(zone);

যখন আমি অস্ট্রেলিয়া / সিডনি টাইম জোনে এই স্নিপেট চালাতাম, আউটপুটটি হুবহু:

Australia/Sydney

আপনি যদি গ্রীষ্মের সময় (ডিএসটি) সচেতন সময় অঞ্চলের নাম বা সংক্ষিপ্ত বিবরণ চান:

    DateTimeFormatter longTimeZoneFormatter = DateTimeFormatter.ofPattern("zzzz", Locale.getDefault());
    String longTz = ZonedDateTime.now(zone).format(longTimeZoneFormatter);
    System.out.println(longTz);

    DateTimeFormatter shortTimeZoneFormatter = DateTimeFormatter.ofPattern("zzz", Locale.getDefault());
    String shortTz = ZonedDateTime.now(zone).format(shortTimeZoneFormatter);
    System.out.println(shortTz);
Eastern Summer Time (New South Wales)
EST

TimeZoneঅন্যান্য উত্তর অধিকাংশ ব্যবহৃত বর্গ কি আমরা যখন প্রশ্ন 2011 সালে জিজ্ঞাসা করা হল যদিও এটি দুর্বল পরিকল্পনা করা হয়েছিল ছিল, ছিল। আজ এটি দীর্ঘকালীন, এবং আমি প্রস্তাব দিচ্ছি যে এর পরিবর্তে আমরা জাভা.টাইম, 2014 এর মধ্যে প্রকাশিত আধুনিক জাভা তারিখ এবং সময় এপিআই ব্যবহার করব।

প্রশ্ন: জাভা.টাইমে অ্যান্ড্রয়েড এপিআই লেভেল 26 প্রয়োজন হয় না?

java.Time পুরানো এবং নতুন উভয় Android ডিভাইসগুলিতে দুর্দান্তভাবে কাজ করে। এটির জন্য কমপক্ষে জাভা 6 প্রয়োজন

  • জাভা 8 এবং তারপরে এবং আরও নতুন অ্যান্ড্রয়েড ডিভাইসগুলিতে (এপিআই স্তর 26 থেকে) আধুনিক এপিআই অন্তর্নির্মিত আসে।
  • অ অ্যান্ড্রয়েড জাভা 6 এবং 7-এ থ্রিটেন ব্যাকপোর্ট, আধুনিক ক্লাসগুলির ব্যাকপোর্ট (জেএসআর 310 এর জন্য থ্রিডেন; নীচে লিঙ্কগুলি দেখুন) পান।
  • (পুরানো) অ্যান্ড্রয়েড থ্রিটেন ব্যাকপোর্টের অ্যান্ড্রয়েড সংস্করণ ব্যবহার করে। একে থ্রিটেনএবিপি বলে। এবং org.threeten.bpসাব-প্যাকেজগুলি সহ আপনি তারিখ এবং সময় ক্লাসগুলি আমদানি করেছেন তা নিশ্চিত করুন ।

লিংক



1

আমার ডিভাইসে TimeZone.getDefault()সর্বদা ইউটিসি সময় অঞ্চলটি ফিরে আসে।

ব্যবহারকারীদের কনফিগার করা সময় অঞ্চল পেতে আমার এটি করা দরকার:

TimeZone.setDefault(null)
val tz = TimeZone.getDefault()

এটি ব্যবহারকারীর নির্বাচিত টাইমজোনটি ফিরিয়ে দেবে।


0

এখানে সমস্ত উত্তর ডেটলাইট প্যারামিটারটিকে মিথ্যা হিসাবে সেট করার পরামর্শ দেয় । এটি বছরের অনেক সময় অনুসারে সংক্ষিপ্ত নাম পরিবর্তন করে এমন অনেক সময় অঞ্চলগুলির জন্য এটি ভুল (উদাহরণস্বরূপ EST বনাম EDT)।

নীচের সমাধানটি আপনাকে সময় অঞ্চলের জন্য বর্তমান তারিখ অনুসারে সঠিক সংক্ষেপণ দেবে।

val tz = TimeZone.getDefault()
val isDaylite = tz.inDaylightTime(Date())
val timezone = tz.getDisplayName(isDaylite, TimeZone.SHORT)

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