আমার কাছে একটি ওয়েবসাইট রয়েছে যা ব্যবহারকারীরা অ্যাপ্লিকেশনটি ব্যবহার করার চেয়ে আলাদা টাইমজোনটিতে হোস্ট করে। এগুলি ছাড়াও ব্যবহারকারীদের একটি নির্দিষ্ট সময় অঞ্চল থাকতে পারে। আমি ভাবছিলাম যে অন্যান্য এসও ব্যবহারকারী এবং অ্যাপ্লিকেশনগুলি কীভাবে এটির কাছে আসে? সর্বাধিক সুস্পষ্ট অংশটি হ'ল ডিবি-র ভিতরে, তারিখ / সময়গুলি ইউটিসিতে সংরক্ষণ করা হয়। সার্ভারে থাকা অবস্থায়, সমস্ত তারিখ / সময় ইউটিসিতে ডিল করা উচিত। তবে, আমি তিনটি সমস্যা দেখতে পাচ্ছি যা আমি কাটিয়ে উঠার চেষ্টা করছি:
ইউটিসিতে বর্তমান সময় পাওয়া (এর সাথে সহজে সমাধান করা
DateTime.UtcNow
)।ডাটাবেস থেকে তারিখ / সময় টানতে এবং ব্যবহারকারীর কাছে এগুলি প্রদর্শন করা। সেখানে সম্ভাব্য হয় প্রচুর বিভিন্ন মতামত তারিখগুলি প্রিন্ট করতে কল। আমি ভিউ এবং নিয়ন্ত্রণকারীদের মধ্যে কিছু স্তর সম্পর্কে ভাবছিলাম যা এই সমস্যাটি সমাধান করতে পারে। অথবা একটি কাস্টম এক্সটেনশন পদ্ধতি চালু
DateTime
(নীচে দেখুন)। প্রধান নীচের দিকটি হ'ল ভিউতে ডেটটাইম ব্যবহারের প্রতিটি জায়গাতেই এক্সটেনশন পদ্ধতিটি কল করতে হবে!এটি এর মতো কিছু ব্যবহার করতে অসুবিধা যুক্ত করবে
JsonResult
। আপনি আর সহজে কল করতে পারবেন নাJson(myEnumerable)
, এটি হতে হবেJson(myEnumerable.Select(transformAllDates))
। হয়তো অটোম্যাপার এই পরিস্থিতিতে সাহায্য করতে পারে?ব্যবহারকারীর কাছ থেকে ইনপুট নেওয়া (স্থানীয় থেকে ইউটিসি)। উদাহরণস্বরূপ, একটি তারিখ সহ একটি ফর্ম পোস্ট করার আগে তারিখটিকে ইউটিসিতে রূপান্তর করা দরকার। প্রথম যে বিষয়টি মনে আসে তা হ'ল একটি প্রথা তৈরি করা
ModelBinder
।
আমি যে সমস্ত এক্সটেনশানগুলি ভিউগুলিতে ব্যবহার করার কথা ভেবেছিলাম তা এখানে:
public static class DateTimeExtensions
{
public static DateTime UtcToLocal(this DateTime source,
TimeZoneInfo localTimeZone)
{
return TimeZoneInfo.ConvertTimeFromUtc(source, localTimeZone);
}
public static DateTime LocalToUtc(this DateTime source,
TimeZoneInfo localTimeZone)
{
source = DateTime.SpecifyKind(source, DateTimeKind.Unspecified);
return TimeZoneInfo.ConvertTimeToUtc(source, localTimeZone);
}
}
আমি মনে করব যে অনেকগুলি অ্যাপ্লিকেশন বিবেচনা করে টাইমজোনগুলি মোকাবেলা করা এত সাধারণ বিষয় হবে এখন ক্লাউড-ভিত্তিক যেখানে সার্ভারের স্থানীয় সময়টি প্রত্যাশিত সময় অঞ্চল থেকে অনেক আলাদা হতে পারে।
এর আগে কি সুন্দরভাবে সমাধান করা হয়েছে? আমি কি অনুপস্থিত কিছু আছে? ধারণা এবং চিন্তা অনেক প্রশংসা করা হয়।
সম্পাদনা: কিছু বিভ্রান্তি দূর করতে আমি ভেবেছিলাম আরও কিছু বিশদ যুক্ত করব। বিষয়টি এখনই ডিবিতে ইউটিসির সময় কীভাবে সংরক্ষণ করবেন তা নয় , এটি ইউটিসি-> স্থানীয় এবং স্থানীয়-> ইউটিসি থেকে যাওয়ার প্রক্রিয়া সম্পর্কে আরও বেশি। @ ম্যাক্স জারবিনি যেমন উল্লেখ করেছেন, ইউটিসি-> লোকাল কোডটি দেখানোর পক্ষে এটি স্পষ্টতই স্মার্ট তবে DateTimeExtensions
উত্তরটি কী সত্যই ব্যবহার করছে ? ব্যবহারকারীর কাছ থেকে ইনপুট পাওয়ার সময়, ব্যবহারকারীর স্থানীয় সময় হিসাবে তারিখগুলি গ্রহণ করা (যেহেতু এটিই জেএস ব্যবহার করবে) এবং তারপরে ModelBinder
ইউটিসিতে রূপান্তর করতে কোনও ব্যবহার করা কি বোধগম্য নয় ? ব্যবহারকারীর টাইমজোনটি ডিবিতে সংরক্ষণ করা হয় এবং সহজেই পুনরুদ্ধার করা হয়।
ModelBinder
।