উইন্ডোজ এবং আইএএনএ সময় অঞ্চলগুলির মধ্যে কীভাবে অনুবাদ করবেন?


149

টাইমজোন ট্যাগ উইকিতে বর্ণিত হিসাবে টাইম জোনের দুটি পৃথক স্টাইল রয়েছে।

  • মাইক্রোসফ্ট উইন্ডোজ এবং। নেট TimeZoneInfoক্লাস (উইন্ডোজ চলমান যখন) এর সাথে ব্যবহারের জন্য সরবরাহ করেছে তারা যেমন একটি মান দ্বারা চিহ্নিত হয় "Eastern Standard Time"

  • টিজেডডিবিতে আইএএনএ দ্বারা সরবরাহ করা এবং TimeZoneInfoলিনাক্স বা ওএসএক্স চলাকালীন । নেট ক্লাস দ্বারা ব্যবহৃত , যেমন একটি মান দ্বারা চিহ্নিত করা হয় "America/New_York"

অনেক ইন্টারনেট ভিত্তিক এপিআই আইএএনএ সময় অঞ্চল ব্যবহার করে তবে বিভিন্ন কারণে কারও কারও এটিকে উইন্ডোজ টাইম জোন আইডি, বা তদ্বিপরীত রূপান্তর করতে হতে পারে।

নেট। এ এটি কীভাবে সম্পন্ন করা যায়?

উত্তর:


198

উইন্ডোজ এবং আইএএনএ সময় অঞ্চল শনাক্তকারীদের মধ্যে রূপান্তর করার জন্য ডেটার প্রাথমিক উত্স হ'ল windowsZones.xmlফাইলটি, ইউনিকোড সিএলডিআর প্রকল্পের অংশ হিসাবে বিতরণ করা । সর্বশেষতম দেব সংস্করণটি এখানে পাওয়া যাবে

তবে , সিএলডিআর বছরে মাত্র দুবার প্রকাশিত হয়। এটি, উইন্ডোজ আপডেটগুলির পর্যায়ক্রমিক ক্যাডেন্স এবং আইএএনএ টাইম জোন ডাটাবেসের অনিয়মিত আপডেটগুলির সাথে, কেবল সিএলডিআর ডেটা সরাসরি ব্যবহার করা জটিল করে তোলে। মনে রাখবেন যে সময় অঞ্চল পরিবর্তনগুলি তাদের নিজেরাই বিশ্বের বিভিন্ন সরকার হিসাবে তৈরি করা হয়, এবং সমস্ত পরিবর্তনগুলি তাদের নিজ নিজ কার্যকর তারিখের আগে এই রিলিজ চক্রগুলিতে তৈরি করার জন্য পর্যাপ্ত নোটিশ দিয়ে করা হয় না।

আরও কয়েকটি প্রান্তের কেসগুলি হ্যান্ডেল করা দরকার যা সিএলডিআর দ্বারা কঠোরভাবে আচ্ছাদিত নয় এবং সময়ে সময়ে নতুন পপ আপ হয়। অতএব, আমি মধ্যে সমাধান জটিলতা encapsulated থাকেন TimeZoneConverter মাইক্রো-গ্রন্থাগার, যা Nuget থেকে ইনস্টল করা যাবে।

এই গ্রন্থাগারটি ব্যবহার করা সহজ। রূপান্তরকরণের কয়েকটি উদাহরণ এখানে রয়েছে:

string tz = TZConvert.IanaToWindows("America/New_York");
// Result:  "Eastern Standard Time"

string tz = TZConvert.WindowsToIana("Eastern Standard Time");
// result:  "America/New_York"

string tz = TZConvert.WindowsToIana("Eastern Standard Time", "CA");
// result:  "America/Toronto"

প্রকল্পের সাইটে আরও উদাহরণ রয়েছে ।

এটি সনাক্ত করা গুরুত্বপূর্ণ যে আইএএনএ সময় অঞ্চলটি যখন একক উইন্ডোজ টাইম জোনে ম্যাপ করা যায় তবে বিপরীতটি সত্য নয়। একটি একক উইন্ডোজ সময় অঞ্চল একাধিক আইএএনএ টাইম জোনে ম্যাপ করা যেতে পারে। এই উপরের উদাহরণগুলোতে, যেখানে দেখা যায় Eastern Standard Timeম্যাপ করা হয় উভয় America/New_York, এবং America/Toronto"001"আপনি সুনির্দিষ্টভাবে কোনও দেশের কোড সরবরাহ না করে এবং সেই দেশের কোনও আলাদা জোনের সাথে কোনও মিল না থাকলে, টাইমজোনকনভার্ট সিএলডিআরকে চিহ্নিত করে "সোনার অঞ্চল" নামে পরিচিত deliver

দ্রষ্টব্য: এই উত্তরটি বছরের পর বছর ধরে বিকশিত হয়েছে, সুতরাং নীচের মন্তব্যগুলি বর্তমান সংশোধনের ক্ষেত্রে প্রযোজ্য বা নাও লাগতে পারে। বিশদ জন্য সম্পাদনা ইতিহাস পর্যালোচনা। ধন্যবাদ।


1
যখন রূপান্তর এই পদ্ধতি ব্যবহার করে (GMT+05:30) Chennai, Kolkata, Mumbai, New Delhiদেয় Asia/Calcuttaএটি হওয়া উচিত Asia/Kolkata। এটি TzdbDateTimeZoneSourceপুরানো মান রয়েছে বলে মনে হচ্ছে ।
এন্টো সুবাস

1
@ ম্যাট জনসন Asia/Kolkataব্যবহারের IanaToWindows পদ্ধতিটি রূপান্তর করার সময় এটি ব্যর্থ হয়। কিন্তু এটি কাজ করে দিয়ে Asia/Calcuttaযা পুরোনো পদ্ধতিতে আপডেট করেছি name.you হয় WindowsToIanaকিন্তু IanaToWindowsএকই সমস্যা আছে। কয়েক অন্যান্য অঞ্চল যা কাজ করছে না হয় America/Argentina/Buenos_Aires, America/Indiana/Indianapolis, Asia/Kathmandu
এন্টো সুবাস

1
@ এন্টজেসবাশ - আবারও দুর্দান্ত পর্যবেক্ষণ! IanaToWindowsক্ষতিপূরণ দেওয়ার জন্য আমি পদ্ধতিটি সম্পাদনা করেছি । অনেক ধন্যবাদ!
ম্যাট জনসন-পিন্ট

2
@ ম্যাটজহানসন প্রথম @ সিরোক্কো পর্যবেক্ষণ। ক্যানোনিকাল আইডি var canonical = tzdbSource.CanonicalIdMap[ ianaZoneId ]; links = Enumerable.Repeat( canonical, 1 ).Concat( links );ব্যবহার করাও আমার পক্ষে কৌশলটি করেছে।
জোহানেস রুডলফ

2
@ সিরোক্কো - দুঃখিত আমি আপনার মন্তব্যটি আর তাড়াতাড়ি দেখিনি। ফাংশন আপডেট। ধন্যবাদ!
ম্যাট জনসন-পিন্ট

4

আমি জানি এটি একটি পুরানো প্রশ্ন, তবে আমি এখানে ব্যবহার করার পরেও আমার ব্যবহারের একটি মামলা ছিল, যেহেতু অনুসন্ধান করার সময় এটি পাওয়া সবচেয়ে প্রাসঙ্গিক পোস্ট। আমি ডকার লিনাক্স ধারকটি ব্যবহার করে একটি .NET কোর অ্যাপ বিকাশ করছিলাম তবে উইন্ডোজ সার্ভারে স্থাপনার জন্য। সুতরাং উইন্ডোজ টাইমজোন নামগুলি সমর্থন করার জন্য আমার কেবল আমার ডকার লিনাক্স ধারক প্রয়োজন। নিম্নলিখিতটি করে আমার অ্যাপ্লিকেশন কোডটি পরিবর্তন না করেই আমি এই কাজটি পেয়েছি:

cp /usr/share/zoneinfo/America/Chicago "/usr/share/zoneinfo/Central Standard Time"
cp /usr/share/zoneinfo/America/New_York "/usr/share/zoneinfo/Eastern Standard Time"
cp /usr/share/zoneinfo/America/Denver "/usr/share/zoneinfo/Mountain Standard Time"
cp /usr/share/zoneinfo/America/Los_Angeles "/usr/share/zoneinfo/Pacific Standard Time"

তারপরে, আমার .NET কোডে, নিম্নলিখিতগুলি কোনও পরিবর্তন ছাড়াই কাজ করেছে: TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time")


1
বক্সের বাইরে কিছু ভাবনা! এটি ঠিক হওয়া উচিত বলে মনে হচ্ছে যতক্ষণ আপনি কয়েকটি নির্দিষ্ট সময় অঞ্চল আবরণ করছেন। মনে রাখবেন যে যুক্তরাষ্ট্রে এই চারটির চেয়ে বেশি রয়েছে। বর্তমান দিনে 50 টি রাজ্য আবরণ, এছাড়াও আপনি জন্য লিঙ্ক যোগ করতে হবে America/Phoenixকরতে "US Mountain Standard Time", Pacific/Honoluluকরতে "Hawaiian Standard Time", America/Anchorageকরতে "Alaskan Standard Time", এবং America/Adakকরতে "Aleutian Standard Time"। এটি মার্কিন যুক্তরাষ্ট্রের অঞ্চল বা historicalতিহাসিক স্বতন্ত্রতাগুলিকে আচ্ছাদন করে না, তবে আপনাকে শুরু করবে।
ম্যাট জনসন-পিন্ট

2
কারও উদ্দেশ্য যদি পুরো বিশ্ব জুড়ে থাকে বা কোনও বৈধ সময় অঞ্চল শনাক্তকারীকে মোকাবেলা করা হয় তবে আমি এই পদ্ধতির সুপারিশ করব না। তালিকাটি খুব দীর্ঘ এবং এর জন্য খুব অস্থির।
ম্যাট জনসন-পিন্ট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.