ডেটটাইম থেকে টাইমজোন পান


103

। নেট ডেটটাইমে কোথায় টাইম জোন তৈরি করা হয়েছিল সে সম্পর্কে তথ্য রয়েছে?

আমার কাছে একটি লাইব্রেরি রয়েছে যা শেষের দিকে "+ zz" আছে এমন ফর্ম্যাট থেকে ডেটটাইম পার্স করে, এবং এটি সঠিকভাবে পার্স করে এবং স্থানীয় সময়কে সামঞ্জস্য করে, ডেটটাইম অবজেক্ট থেকে নির্দিষ্ট সময় অঞ্চলটি কী ছিল তা আমার পাওয়া দরকার।

এটা কি আদৌ সম্ভব? আমি যা দেখতে পাচ্ছি তা হ'ল ডেটটাইম.কাইন্ড, যা সময়টি স্থানীয় বা ইউটিসি কিনা তা নির্দিষ্ট করে।


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

উত্তর:


136

ডেটটাইমে নিজেই কোনও আসল টাইমজোন তথ্য নেই। এটি ইউটিসি বা স্থানীয় কিনা তা জানতে পারে তবে স্থানীয়ভাবে কী বোঝায় তা নয়।

ডেটটাইম অফসেট কিছুটা ভাল - এটি মূলত একটি ইউটিসি সময় এবং একটি অফসেট। যাইহোক, সময়সীমা নির্ধারণের জন্য এটি এখনও সত্যই যথেষ্ট নয়, কারণ বিভিন্ন সময় অঞ্চলগুলি যে কোনও একটি সময়ে একই অফসেট পেতে পারে। এটি আপনার পক্ষে এটি যথেষ্ট ভাল হতে পারে বলে মনে হচ্ছে, যেমন তারিখ / সময় পার্সিংয়ের সাথে আপনার কাজ করা সমস্তই অফসেট।

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

সম্পাদনা: প্রায় চার বছর পরে, আমি এখন নোডা টাইম ব্যবহার করার পরামর্শ দিচ্ছি যার তারিখ / সময় প্রকারের চেয়ে আরও সমৃদ্ধ সেট রয়েছে। যদিও আমি নোডা সময়ের প্রধান লেখক হিসাবে পক্ষপাতিত্ব করছি :)


2
কোডপ্লেক্সে পাবলিকডোমাইন প্রজেক্টটি আপনার জন্য এটি করে।
চিজো

বিশ্ব সময় অঞ্চলগুলি স্থির হয় এবং পরিবর্তিত না হলে ছাত্রলীগের একটি টাইমজোন এনাম ভাল হবে।
জেফ লাফে

1
@ জেলাফায়: তবে, তারা পরিবর্তন করে - উদাহরণস্বরূপ, গত বছর উইন্ডোজটিতে আরও বেশি সময় অঞ্চল যুক্ত হয়েছিল।
জন স্কে

এই প্রকল্পটি আর লেখক দ্বারা রক্ষণাবেক্ষণ করা হয় না; পাবলিকডোমেন.কোডিপ্লেক্স.কম মনে হয় সম্ভবত এটি ব্যবহার করতে পারে তার উপর নির্ভর করে কেউ এটি ব্যবহার করতে পারে; timezone.codeplex.com
AnneTheAgile

3
@ অ্যানি দ্য অগিল: ব্যক্তিগতভাবে আমি নিজের নোডা টাইম লাইব্রেরিটি অবশ্যই ব্যবহার করার পরামর্শ দিয়েছিলাম :)
জন স্কিটে

36

না।

একজন বিকাশকারী কিছু বাহ্যিক প্রক্রিয়া মাধ্যমে ডেটটাইম মানের সাথে সম্পর্কিত সময়-অঞ্চলের তথ্যের উপর নজর রাখার জন্য দায়বদ্ধ।

এখানে একটি নিবন্ধ একটি দুর্দান্ত নিবন্ধ । প্রতিটি। নেট বিকাশকারীকে অবশ্যই পড়তে হবে।

সুতরাং আমার পরামর্শটি হ'ল একটি সামান্য র‍্যাপার ক্লাস লিখুন যা আপনার প্রয়োজন অনুসারে চলে।



2

আপনি টাইমজোনআইফো ক্লাস ব্যবহার করতে পারেন

টাইমজোন শ্রেণি স্থানীয় সময় অঞ্চলকে স্বীকৃতি দেয় এবং সমন্বিত ইউনিভার্সাল সময় (ইউটিসি) এবং স্থানীয় সময়ের মধ্যে সময়কে রূপান্তর করতে পারে। একটি টাইমজোনআইফোন অবজেক্ট যে কোনও সময় অঞ্চলকে উপস্থাপন করতে পারে এবং টাইমজোনআইফো ক্লাসের পদ্ধতিগুলি এক সময় অঞ্চলে সময়কে অন্য যে কোনও সময় অঞ্চলে সংশ্লিষ্ট সময়ে রূপান্তর করতে ব্যবহার করা যেতে পারে। টাইমজোনআইফো ক্লাসের সদস্যগণ নিম্নলিখিত ক্রিয়াকলাপ সমর্থন করে:

  1. অপারেটিং সিস্টেম দ্বারা ইতিমধ্যে সংজ্ঞায়িত একটি সময় অঞ্চল পুনরুদ্ধার করা।

  2. একটি সিস্টেমে উপলব্ধ সময় অঞ্চলগুলি গণনা করা।

  3. বিভিন্ন সময় অঞ্চলগুলির মধ্যে সময়কে রূপান্তর করা।

  4. নতুন সময় অঞ্চল তৈরি করা যা অপারেটিং সিস্টেম দ্বারা ইতিমধ্যে সংজ্ঞায়িত করা হয়নি।

    পরবর্তী পুনরুদ্ধারের জন্য একটি সময় অঞ্চল ক্রমিক করা।


1
... তবে, একটি ডেটটাইম দেওয়া হলেও এখনও আমার জ্ঞানের সাথে ডেটটাইমের টাইমজোন নির্ধারণের জন্য টাইমজোনআইএনফো ব্যবহার করার উপায় নেই।
রেমি ডেসপ্রেস-স্মিথ

@ রেমিডেস্প্রেস-স্মিথ আমি কেবল টাইমজোনইনফোর সাথে ডেটটাইম 1 ক্লাসে সঞ্চয় করি।
কনরাড


0

সাধারণত অনুশীলনটি হ'ল ইউটিসির "টাইমজোন" দিয়ে ডেটটাইম হিসাবে ডেটা পাঠানো এবং তারপরে টাইমজোনআইফোন অবজেক্টটি পাস করা এবং আপনি যখন ডেটা প্রদর্শন করতে প্রস্তুত হন, আপনি ইউটিসি ডেটটাইম রূপান্তর করতে টাইমজোনআইএনফো অবজেক্টটি ব্যবহার করেন।

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

অন্যরা যেমন এখানে ইঙ্গিত করেছে, মাইক্রোসফ্ট যদি এটির উপরে উঠে যায় এবং এটি করার জন্য একটি দুর্দান্ত অবজেক্ট তৈরি করে দেওয়া ভাল হয় তবে আপাতত আপনাকে দুটি বিষয় নিয়ে কাজ করতে হবে।


0

ডেটটাইম এর টাইমজোন অফসেট জানে না। অফসেট বা টাইমজোন নাম (যেমন EAT, CEST, EST ইত্যাদি) ফেরত দেওয়ার জন্য কোনও অন্তর্নির্মিত পদ্ধতি নেই।

অন্যদের প্রস্তাবিত মত, আপনি নিজের তারিখটিকে ইউটিসিতে রূপান্তর করতে পারেন:

DateTime localtime = new DateTime.Now;
var utctime = localtime.ToUniversalTime();

এবং তারপরে কেবল পার্থক্য গণনা করুন:

TimeSpan difference = localtime - utctime;

এছাড়াও আপনি ডেটটাইম অফসেট ব্যবহার করে এক সময়কে অন্যটিতে রূপান্তর করতে পারেন:

DateTimeOffset targetTime = DateTimeOffset.Now.ToOffset(new TimeSpan(5, 30, 0));

তবে এটি ক্ষতিকারক সংকোচনের এক ধরণের - অফসেট একাই আপনাকে জানাতে পারে না যে এটি কোন সময় অঞ্চল হিসাবে দুটি পৃথক দেশ বিভিন্ন টাইম জোনে থাকতে পারে এবং কেবল বছরের অংশের জন্য একই সময় থাকতে পারে (যেমন দক্ষিণ আফ্রিকা এবং ইউরোপ)। এছাড়াও, সচেতন থাকুন যে গ্রীষ্মের দিবালোক সংরক্ষণের সময়টি বিভিন্ন তারিখে প্রবর্তিত হতে পারে (EST বনাম সিইটি - একটি 3-সপ্তাহের পার্থক্য)।

আপনি টাইমজোনআইফো ক্লাস ব্যবহার করে আপনার স্থানীয় সিস্টেমের সময় অঞ্চলটির নাম পেতে পারেন:

TimeZoneInfo localZone = TimeZoneInfo.Local;
localZone.IsDaylightSavingTime(localtime) ? localZone.DaylightName : localZone.StandardName

আমি গেরি শেঙ্কের সাথে একমত, দয়া করে তাঁর প্রস্তাবিত নিবন্ধটি পড়ুন।

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