ডেটটাইম রূপান্তর করবেন? স্ট্রিং


11

আমি একটি DateTime?স্ট্রিং রূপান্তর করতে চান । একটি তারিখ নাল হলে আসতে "", অন্য ভালো একটি স্ট্রিং বিন্যাস ফিরে "2020-03-05T07:52:59.665Z"। কোডটি এরকম কিছু তবে এটি কাজ করবে না। বলা "DateTime?""ToUniversalTime" জন্য একটি সংজ্ঞা থাকে না। কেউ কিভাবে এই ঠিক করতে জানেন?

DateTime? date = DateTime.UtcNow;

var dateInUTCString = date == null ? "" : date.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'");

1
যাইহোক, আপনি কি চান .ToString("o")?
— জন

ওহ, আমি ইতিমধ্যে ডেটটাইম.আউটসি এখন ব্যবহার করি তাই আমাকে আর টু ইউনভার্সালটাইম () ব্যবহার করার দরকার নেই? @John। আহ আমি দেখছি, আমি আরও .ToString("o")গবেষণা করব। ধন্যবাদ!
— ক্যামেতে

1
প্রকৃতপক্ষে, এবং ধরে নিচ্ছেন যে আপনি কেবল একটি আইএসও 8601 ফর্ম্যাট চান, আপনি "ও" ব্যবহার করতে পারেন। দস্তাবেজগুলি
— জন

@ জন: "ও" টিক স্পষ্টতা ব্যবহার করে, এটি আইএসও -8601 অনুসারে হওয়া সত্ত্বেও কাম্য নয়।
— জন স্কিটি

1
"তবে যখন আমি ব্যবহার করি। টুস্ট্রিং (" ও "), এতে জেড নেই" - আপনি যদি এখনও টু ইউনভার্সালটাইম () কল করেন; 'জেড' এর থেকে এটি ইউটিসির এক ধরনের রয়েছে।
— জন স্কিটি

উত্তর:


16

ডেটটাইম? একটি মান সম্পত্তি এবং একটি HasValue সম্পত্তি আছে

চেষ্টা করুন:

var dateInUTCString = date.HasValue ? date.Value.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") : "";

আপনি সংক্ষিপ্ত সংস্করণ ব্যবহার করতে পারেন:

var dateInUTCString = date?.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fff'Z'") ?? "";

8

Valueলেসেকের জবাব অনুসারে আপনি সম্পত্তিটি সরাসরি ব্যবহার করতে পারার সময়, আমি সম্ভবত নাল-কন্ডিশনাল অপারেটরটি নাল-কোলেসিং অপারেটরের সাথে ব্যবহার করব:

string dateInUTCString =
    date?.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ss.fffZ", CultureInfo.InvariantCulture) 
    ?? "";

এখানে ?.কেবল শূন্য হলে একটি নাল মান হবে এবং কলটি ফলাফল dateনাল হলে ??অপারেটর একটি ডিফল্ট মান প্রদান করবে date?.ToUniversalTime().ToString(...)(যা কেবল dateনাল হলেই ঘটবে )।

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

স্ট্রিংয়ের মধ্যে কতটা নির্ভুলতা প্রকাশ করা আপনার যদি আপত্তি না থাকে তবে আপনি "ও" স্ট্যান্ডার্ড ফর্ম্যাট স্ট্রিংটি ব্যবহার করে কোডটিকে আরও সহজ করে তুলতে পারেন :

string dateInUTCString = date?.ToUniversalTime().ToString("O") ?? "";

সেই সময়ে আপনাকে "ও" দ্বারা সর্বদা ব্যবহৃত CultureInfo.InvariantCultureহিসাবে নির্দিষ্ট করার দরকার নেই ।


1
"O"ফর্ম্যাট স্ট্রিং হিসাবে ব্যবহার করবেন না কেন ? ডকস.মাইক্রোসফট.এইন
— জোহর

1
@ জোহরপিল্ড: এটিতে যথার্থতা রয়েছে এবং ওপি দৃশ্যত কেবল মিলিসেকেন্ডের নির্ভুলতা চায়।
— জন স্কিটি

প্রকৃতপক্ষে আমি এমন একটি ফর্ম্যাট চাই যা Zস্ট্রিং শেষে থাকবে
— কামেহে

1
@ কামাহে: "ও" ফর্ম্যাট স্পেসিফায়ার ইতিমধ্যে এটি ব্যবহার করেছে - জোহর পোস্ট করেছেন এমন ডকুমেন্টেশন লিঙ্কটি দেখুন। আপনি যদি সত্যই কতগুলি অঙ্কের নির্ভুলতা পেয়ে থাকেন তা যদি সত্যিই আপত্তি না করে থাকেন তবে "ও" ব্যবহার করা অনেক সহজ হবে - সেই ক্ষেত্রে আপনার সংস্কৃতিআইনফো.আইভাভারেন্ট সংস্কৃতি নির্দিষ্ট করার দরকার নেই। বিকল্প হিসাবে যুক্ত করতে উত্তরটি সংশোধন করবে।
— জন স্কিটি

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