তারিখ বিন্যাস yyyy-MM-ddTHH: মিমি: এসএসজেড


103

আমি ধরে নিলাম এটি বেশ সহজ হওয়া উচিত, তবে এটি পাওয়া গেল না :( এই ফর্ম্যাটে জেড সময় অঞ্চল
T টি দীর্ঘ সময়ের প্যাটার্ন,
আমি কীভাবে এই বিন্যাসে একটি তারিখ পেতে পারি তা ব্যবহার না করেই

DateTime dt = DateTime.Now;
Console.WriteLine(dt.ToString("yyyy-MM-ddTHH:mm:ssZ"));

সি # তে


4
আমি জানি এই প্রশ্নটি প্রায় 9 বছর ধরে হয়েছে তবে এর গৃহীত উত্তরটি UtcNow.ToString(s)+Zভুল। ISO8601 রাউন্ডট্রিপ বিকল্প দ্বারা সমর্থিত ToString("O")। এছাড়াও এটি উল্লেখ করার জন্য যে স্বীকৃত উত্তরটিতে ডেটটাইমের ইউটিসি মান ব্যবহার করা হয়, যা সর্বদা টাইমজোন জেড দেয়, কেবলমাত্র আসল তারিখের মানটি ব্যবহার না করে, যা (যদি দয়া করে = স্থানীয় থাকে) কোনও দিবালোক সংরক্ষণের সময়সীমা থাকতে পারে। গৃহীত উত্তর পরিবর্তন বিবেচনা?
— রিচার্ডিসিমো

উত্তর:


146

ইউটিসি ব্যবহার করে

আইএসও 8601 ( এমএসডিএন ডেটটাইম ফর্ম্যাট )

Console.WriteLine(DateTime.UtcNow.ToString("s") + "Z");

2009-11-13T10: 39: 35Z

জেড সেখানে কারণ

সময়টি ইউটিসি-তে থাকলে স্থান ছাড়াই সময় শেষে সরাসরি 'জেড' যুক্ত করুন। 'জেড' হ'ল জিরো ইউটিসি অফসেটের জন্য জোন ডিজাইনার। "09:30 ইউটিসি" তাই "09: 30Z" বা "0930Z" হিসাবে উপস্থাপিত হয়। "14:45:15 ইউটিসি" "14: 45: 15Z" বা "144515Z" হবে।

যদি আপনি একটি অফসেট অন্তর্ভুক্ত করতে চান

int hours = TimeZoneInfo.Local.BaseUtcOffset.Hours;
string offset = string.Format("{0}{1}",((hours >0)? "+" :""),hours.ToString("00"));
string isoformat = DateTime.Now.ToString("s") + offset;
Console.WriteLine(isoformat);

দুটি বিষয় লক্ষণীয়: + বা - সময়ের পরে প্রয়োজন তবে অবশ্যই + ইতিবাচক সংখ্যায় প্রদর্শিত হয় না। উইকিপিডিয়া অনুসারে অফসেটটি + এইচএইচ ফর্ম্যাট বা + এইচএইচ: মিমি হতে পারে। আমি কয়েক ঘন্টা রেখেছি।

যতদূর আমি জানি, আরএফসি 1123 (এইচটিটিপি তারিখ, "ইউ" ফর্ম্যাটর) সময় অঞ্চল অফসেট দেওয়ার জন্য নয়। সমস্ত সময় জিএমটি / ইউটিসি হওয়ার উদ্দেশ্যে।


শীতল। আপনার আউটপুটটিতে টিজেড অফসেট অন্তর্ভুক্ত নেই, যদিও?
— নীল বার্নওয়েল

আমি এটি এতে যুক্ত করেছি - দস্তাবেজগুলি বলছে যে এর 'ফর্ম্যাটটি আইএসও 8601 এর উপর ভিত্তি করে আমার মনে হয় না এতে টাইমজোন অন্তর্ভুক্ত রয়েছে।
— ক্রিস এস

ওহ অবশ্যই, ইউটিসির সময় অঞ্চল নেই। ডিওহ। তিনি তার আউটপুটে টাইমজোন তথ্য চাইছেন। হয়তো ডেটটাইম অফসেট সে কী খুঁজছিল?
— নিল বার্নওয়েল

5
ম্যানুয়ালি সেখানে জেড যুক্ত করা ভাল নয়, আপনার ব্যবহার করা উচিত o টুস্ট্রিং ("ও") কারণ এটি আপনাকে সঠিক আউটপুট দেবে। যদি মিলিসেকেন্ডগুলি সমস্যা হয় তবে সেগুলি গোল করা উচিত। ম্যানুয়ালি জেড যোগ করা যদি আপনি স্থানীয় সময় এটি যুক্ত করেন, যা সত্যই ইউটিসি নয়, ভুল ফলাফল দিতে পারে।
— টুউকা লিন্ড্রোস

69
Console.WriteLine(DateTime.UtcNow.ToString("o"));  
Console.WriteLine(DateTime.Now.ToString("o"));

ফলাফল:

2012-07-09T19:22:09.1440844Z  
2012-07-09T12:22:09.1440844-07:00

আমি কনসোল.ওরাইটলাইন (ডেটটাইম.নো। টুস্ট্রিং ("ও")) ব্যবহার করেছি। ধন্যবাদ
— জিগ্লার

5
গৃহীত উত্তরটি ইউটিসি তারিখের জন্য ফর্ম্যাট স্পেসিফায়ার "এস" ব্যবহার করতে এবং একটি জেড যুক্ত করতে বলে। আপনার যদি মিলি সেকেন্ডের দরকার না হয় তবে এটি খুব ভাল এবং ঠিক আছে তবে আপনি যদি মিলিসেকেন্ডগুলি চান তবে আপনাকে এই উত্তরগুলির মতো "ও" ব্যবহার করতে হবে। "ও" দিয়ে, মিলিসেকেন্ডগুলি ডিফল্ট হিসাবে প্রদর্শিত হয় এবং জেড ইতিমধ্যে ইউটিসির তারিখগুলির শেষে শেষ হয়।
— জিম

4
ডেটটাইম.নো টুস্ট্রিং ("ও") সমস্ত ধরণের সমস্যা সমাধান করে কারণ এটি এটির সাথে সঠিক অফসেট ফিরে আসে।
— মো জাআতার

12

"ও" ফর্ম্যাট ডেটটাইম বনাম ডেটটাইম অফসেটের জন্য পৃথক :(

DateTime.UtcNow.ToString("o") -> "2016-03-09T03:30:25.1263499Z"

DateTimeOffset.UtcNow.ToString("o") -> "2016-03-09T03:30:46.7775027+00:00"

আমার চূড়ান্ত উত্তর হল

DateTimeOffset.UtcDateTime.ToString("o")   //for DateTimeOffset type
DateTime.UtcNow.ToString("o")              //for DateTime type

8

সি # 6+ এ আপনি স্ট্রিং ইন্টারপোলেশন ব্যবহার করতে পারেন এবং এটি আরও সংশ্লেষ করতে পারেন:

$"{DateTime.UtcNow:s}Z"

আপনি আমার অনেক সময় সাশ্রয় করেছেন। সহজ এবং মিষ্টি সমাধান।
— রাজু পালাদিয়া



5

একটি বিকল্প হ'ল "ও" ফর্ম্যাট ব্যবহার করে স্ট্রিংয়ে রূপান্তর করার আগে ডেটটাইমকে টু ইউনিভার্সালটাইমে () রূপান্তর করতে পারে । উদাহরণ স্বরূপ,

var dt = DateTime.Now.ToUniversalTime();
Console.WriteLine(dt.ToString("o"));

এটি আউটপুট দেবে:

2016-01-31T20:16:01.9092348Z

2

এটি বিক্রয়কেন্দ্র REST এপিআই ক্যোয়ারির ডেটটাইম ফর্ম্যাটগুলির সাথে দুর্দান্ত কাজ করে

DateTime now = DateTime.UtcNow;
string startDate = now.AddDays(-5).ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");   
string endDate = now.ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");  
//REST service Query 
string salesforceUrl= https://csxx.salesforce.com//services/data/v33.0/sobjects/Account/updated/?start=" + startDate + "&end=" + endDate;

// https://csxx.salesforce.com/services/data/v33.0/sobjects/Account/updated/?start=2015-03-10T15:15:57Z&end=2015-03-15T15:15:57Z

এটি সেলসফোর্স থেকে কোনও সমস্যা ছাড়াই ফলাফলগুলি প্রদান করে।


-6

আপনি জিনিসগুলি বিভক্ত করতে পারেন, এটির জন্য আরও কোডের প্রয়োজন হবে তবে এটি আপনার পছন্দ মতো কাজ করবে:

DateTime year = DateTime.Now.Year;
DateTime month = DateTime.Now.Month;
DateTime day = DateTime.Now.Day;

ect।

অবশেষে:

Console.WriteLine(year+month+day+etc.);

এটি পরিচালনা করার এটি একটি অত্যন্ত সাহসী উপায় যদিও ...


এই উত্তরটি পছন্দসই আউটপুটটির মতো কিছুই তৈরি করে না
— cja

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