একটি ডেটটাইম অবজেক্ট দেওয়া হয়েছে, আমি স্ট্রিং ফর্ম্যাটে একটি আইএসও 8601 তারিখটি কীভাবে পাব?


787

প্রদত্ত:

DateTime.UtcNow

আমি কীভাবে একটি স্ট্রিং পেতে পারি যা কোনও আইএসও 8601 -রূপীকরণের ফর্ম্যাটে একই মানটির প্রতিনিধিত্ব করে ?

নোট করুন যে আইএসও 8601 অনেকগুলি অনুরূপ ফর্ম্যাটকে সংজ্ঞায়িত করে। আমি সুনির্দিষ্ট ফর্ম্যাটটি খুঁজছি:

yyyy-MM-ddTHH:mm:ssZ

উত্তর:


777

পাঠকদের উদ্দেশ্যে নোট: বেশ কয়েক জন মন্তব্যকারী এই উত্তরে কিছু সমস্যা চিহ্নিত করেছেন (বিশেষত প্রথম পরামর্শের সাথে সম্পর্কিত)। আরও তথ্যের জন্য মন্তব্য বিভাগ দেখুন।

DateTime.UtcNow.ToString("yyyy-MM-ddTHH\\:mm\\:ss.fffffffzzz");

এটি আপনাকে 2008-09-22T13: 57: 31.2311892-04: 00 এর অনুরূপ একটি তারিখ দেয় ।

আরেকটি উপায় হ'ল:

DateTime.UtcNow.ToString("o");

যা আপনাকে 2008-09-22T14: 01: 54.9571247Z দেয়

নির্দিষ্ট বিন্যাসটি পেতে, আপনি ব্যবহার করতে পারেন:

DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ")

তারিখটাইম বিন্যাস বিকল্প


20
এই দিনগুলিতে, এটি করা (একটি অফসেটের সাথে ইউটিসি সময় দেওয়ার চেষ্টা করা, যা প্রচুর পরিমাণে বোঝায় না) ব্যতিক্রম ছুঁড়ে ফেলে। সুতরাং, আমি অন্যদের সাথে একমত যে আক্রমণকারী সংস্কৃতির সাথে "গুলি" ফর্ম্যাট সম্ভবত আরও সঠিক। এফওয়াইআই ফরমেটেক্সেপশনটির বার্তাটি হ'ল: "একটি ইউটিসি ডেটটাইম একটি ফর্ম্যাটে টেক্সটে রূপান্তর করা হচ্ছে যা কেবল স্থানীয় সময়ের জন্য সঠিক Date ডেটটাইম কল করার সময় এটি ঘটতে পারে o টুস্ট্রিং 'z' ফর্ম্যাট স্পেসিফায়ার ব্যবহার করে, এতে একটি স্থানীয় সময় অঞ্চল অন্তর্ভুক্ত থাকবে আউটপুট মধ্যে। "
টম লিয়াঞ্জা

9
আমি অস্ট্রেলিয়ায় থাকি, এবং আমার ToString("yyyy-MM-ddTHH:mm:ssK")জন্য কাজ করার জন্য আমাকে এটি ব্যবহার করতে হয়েছিল (আমি ব্যবহার করছিলাম এমন জ্যাকারি টাইমগো প্লাগইন সহ)।
গোনালে

6
আপনি যদি অফসেট dt.ToString("s") + dt.ToString("zzz")
টাইমজোনটি

4
স্ল্যাশগুলি (\ :) স্ট্রিংয়ের সাথে সমস্যাগুলি সৃষ্টি করে ... পরিবর্তে একটি স্ট্রিং আক্ষরিক ব্যবহার করতে একটি @ অক্ষর রেখে।
জিগি

6
@ কোর: এটি স্ট্যান্ডার্ড ফর্ম্যাটগুলির মধ্যে একটি, যা লিঙ্কিত
ওয়েন

360

DateTime.UtcNow.ToString("s", System.Globalization.CultureInfo.InvariantCulture)"স" ফর্ম্যাট স্পেসিফায়ার হিসাবে আপনি যা খুঁজছেন তা যা আপনাকে দেওয়া উচিত তা বাছাইযোগ্য তারিখ / সময় প্যাটার্ন হিসাবে বর্ণনা করা হয়েছে; আইএসও 8601 অনুসারে।


34
আমি বিশ্বাস করি এটিই সঠিক উত্তর। মাইক্রোসফ্ট ইতোমধ্যে আইএসও 8601 বাস্তবায়িত করলে YYYY-MM-ইত্যাদি সম্পর্কিত স্পষ্টভাবে সংজ্ঞায়িত করার কোনও অর্থ নেই। আইয়েনের প্রতিক্রিয়াও ঠিক ছিল, তবে আপনাকে সবসময় ইনভারেন্টাল কালচার (বা অন্য কোনও সংস্কৃতিআইফোন) নির্দিষ্ট করে দেওয়া উচিত (যেমন কখনই ধরে নিবেন না। নেট করা উচিত নয়) শুধু অনুমান)। আপনি এটিও ব্যবহার করতে পারেন: DateTime.UtcNow.ToString(CultureInfo.InvariantCulture.DateTimeFormat.SortableDateTimePattern); তবে, যেহেতু এগুলি সমস্ত সময় অঞ্চল ইত্যাদি বাদ দেয় তাই আপনার স্পষ্ট ফর্ম্যাটর ব্যবহার করা ছাড়া অন্য কোনও উপায় নেই, যেমন"yyyy-MM-ddTHH:mm:ss.fffZ"
জন ডেভিস

20
এটি অনুসারে এটি টাইমজোনটি ছেড়ে দেয়, এটি Zদেখতে এমন: DateTime.UtcNow.ToString(c, CultureInfo.InvariantCulture)) => 2012-06-26T11:55:36এবং কোনও মিলিসেকেন্ড রেজোলিউশন নেই যা কম্পিউটারগুলি প্রতি সেকেন্ডে ন্যায্য সংখ্যক টিক্স দেয় বলে খুব সুন্দর।
হেনরিক

9
সঙ্গে oআপনি পেতে 2012-06-26T11:55:36.1007668Z, যার অর্থ 36.1007668সেকেন্ড, তাই আপনি নিচে রেজল্যুশন পেতে 1/10^7এক সেকেন্ডের। আইএসও 8601: 2004If a decimal fraction is included, lower order time elements (if any) shall be omitted and the decimal fraction shall be divided from the integer part by the decimal sign [...] the comma (,) or full stop (.)
হেনরিক


2
@ বিঙ্কি - এখন আমি খুব বিভ্রান্ত SortableDateTimePattern এর জন্য আমি পূর্ববর্তী লিখিত ডকুমেন্টেশন অনুসারে এটি সংস্কৃতি নির্দিষ্ট হওয়া উচিত। তবুও, এটি তার নিজস্ব উদাহরণগুলির সাথে বিপরীত বলে মনে হচ্ছে (যেহেতু তারা সকলেই এক রকম দেখাচ্ছে); চেষ্টা DateTime.Now.ToString("s", new CultureInfo(myCulture))
ড্রজাউস

87
DateTime.UtcNow.ToString("s")

2008-04-10T06: 30: 00 এর মতো কিছু ফেরত দেয়

UtcNowস্পষ্টতই একটি ইউটিসি সময় ফেরত দেয় যাতে এতে কোনও ক্ষতি হয় না:

string.Concat(DateTime.UtcNow.ToString("s"), "Z")

11
মাত্র আগ্রহের বাইরে: স্ট্রিং.কনক্যাট () '' এর চেয়ে কেন?
ড্যানিয়েল ফোর্টুনভ

2
অভ্যাস, কোন পার্থক্য আছে?
আইয়েন

84
@ কোয়েঞ্জোমার্স: আমি মনে করি এটি সঠিক নয়। আমার মনে a + bহয় একই মধ্যবর্তী কোডটির সংকলনগুলি string.Concat(a, b)(অনুমান করে যে a এবং b স্ট্রিংগুলি অবশ্যই রয়েছে) সুতরাং কর্মক্ষমতা বা মেমরির ব্যবহারের মধ্যে কোনও পার্থক্য নেই।
মার্ক বায়ার্স

78
হ্যাঁ, মার্ক ঠিক আছে। কেইন, আপনি ঠিক থাকলেও আপনি একটি অযৌক্তিক অকালীন অণু-অপ্টিমাইজেশনের ফাঁদে পড়ে গেছেন।
নলডোরিন

7
@ গ্রেগ ৮৪: ঠিক আছে, আপনি পুরোপুরি ঠিক নন। মাইক্রোসফ্ট আর্কিটেক্ট রিকো মারিয়ানির এই পোস্টটি দেখুন: ব্লগস.এমএসএনএন / বি / ক্রোম / আর্কিভ / ২০০৩ / 12 / 15 / 43628.aspx - তিনি বলেছিলেন যে একটি + বি সংক্ষিপ্ত আকারে সংকলন করেছে + এর সঠিক ব্যবহার সম্পর্কে আরও কিছু তথ্য রয়েছে StringBuilder।
mrówa

37

ব্যবহার করুন:

private void TimeFormats()
{
    DateTime localTime = DateTime.Now;
    DateTime utcTime = DateTime.UtcNow;
    DateTimeOffset localTimeAndOffset = new DateTimeOffset(localTime, TimeZoneInfo.Local.GetUtcOffset(localTime));

    //UTC
    string strUtcTime_o = utcTime.ToString("o");
    string strUtcTime_s = utcTime.ToString("s");
    string strUtcTime_custom = utcTime.ToString("yyyy-MM-ddTHH:mm:ssK");

    //Local
    string strLocalTimeAndOffset_o = localTimeAndOffset.ToString("o");
    string strLocalTimeAndOffset_s = localTimeAndOffset.ToString("s");
    string strLocalTimeAndOffset_custom = utcTime.ToString("yyyy-MM-ddTHH:mm:ssK");

    //Output
    Response.Write("<br/>UTC<br/>");
    Response.Write("strUtcTime_o: " + strUtcTime_o + "<br/>");
    Response.Write("strUtcTime_s: " + strUtcTime_s + "<br/>");
    Response.Write("strUtcTime_custom: " + strUtcTime_custom + "<br/>");

    Response.Write("<br/>Local Time<br/>");
    Response.Write("strLocalTimeAndOffset_o: " + strLocalTimeAndOffset_o + "<br/>");
    Response.Write("strLocalTimeAndOffset_s: " + strLocalTimeAndOffset_s + "<br/>");
    Response.Write("strLocalTimeAndOffset_custom: " + strLocalTimeAndOffset_custom + "<br/>");

}

আউটপুট

UTC
    strUtcTime_o: 2012-09-17T22:02:51.4021600Z
    strUtcTime_s: 2012-09-17T22:02:51
    strUtcTime_custom: 2012-09-17T22:02:51Z

Local Time
    strLocalTimeAndOffset_o: 2012-09-17T15:02:51.4021600-07:00
    strLocalTimeAndOffset_s: 2012-09-17T15:02:51
    strLocalTimeAndOffset_custom: 2012-09-17T22:02:51Z

সূত্র:


2
দেখে মনে হচ্ছে আপনি স্থানীয় কাস্টমগুলিতে অনুলিপি করার শিকার হয়েছেন ;-) এর string strLocalTimeAndOffset_custom = localTimeAndOffset.ToString("yyyy-MM-ddTHH:mm:ssK");ফলস্বরূপ:strLocalTimeAndOffset_custom: 2012-09-17T22:02:51-07:00
হলি

33
System.DateTime.UtcNow.ToString("o")

=>

val it : string = "2013-10-13T13:03:50.2950037Z"

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

23

আপনি পরবর্তী কোড সহ "জেড" ( আইএসও 8601 ইউটিসি ) পেতে পারেন :

Dim tmpDate As DateTime = New DateTime(Now.Ticks, DateTimeKind.Utc)
Dim res as String = tmpDate.toString("o") '2009-06-15T13:45:30.0000000Z


এখানে কেন:

আইএসও 8601 এর কিছু আলাদা ফর্ম্যাট রয়েছে:

DateTimeKind.Local

2009-06-15T13:45:30.0000000-07:00

DateTimeKind.Utc

2009-06-15T13:45:30.0000000Z

DateTimeKind.Unspecified

2009-06-15T13:45:30.0000000


.NET এই বিকল্পগুলির সাথে আমাদের একটি এনাম সরবরাহ করে:

'2009-06-15T13:45:30.0000000-07:00
Dim strTmp1 As String = New DateTime(Now.Ticks, DateTimeKind.Local).ToString("o")

'2009-06-15T13:45:30.0000000Z
Dim strTmp2 As String = New DateTime(Now.Ticks, DateTimeKind.Utc).ToString("o")

'2009-06-15T13:45:30.0000000
Dim strTmp3 As String = New DateTime(Now.Ticks, DateTimeKind.Unspecified).ToString("o")

দ্রষ্টব্য : আপনি যদি টুস্ট্রিং ("ও") অংশে ভিজ্যুয়াল স্টুডিও ২০০৮ "ওয়াচ ইউটিলিটি" প্রয়োগ করেন তবে আপনি বিভিন্ন ফলাফল পেতে পারেন, এটি কোনও বাগ কিনা তা আমি জানি না তবে এই ক্ষেত্রে স্ট্রিং ভেরিয়েবল ব্যবহার করে আপনার আরও ভাল ফলাফল হতে পারে যদি আপনি ডিবাগিং করেন

উত্স: স্ট্যান্ডার্ড তারিখ এবং সময় ফর্ম্যাট স্ট্রিংস (এমএসডিএন)


20

যদি আপনাকে অবশ্যই আইএসও 8601 তে ডেটটাইম ব্যবহার করা হয়, তবে টুস্ট্রিং ("ও") আপনার সন্ধান করছে তা পাওয়া উচিত। উদাহরণ স্বরূপ,

2015-07-06T12:08:27

তবে ডেটটাইম + টাইমজোন । নেট এ ব্লগ পোস্ট ডেটটাইম এবং ডেটটাইম অফসেটে বর্ণিত হিসাবে অন্যান্য সমস্যাগুলি উপস্থিত করতে পারে : ভাল অনুশীলন এবং সাধারণ সমস্যাগুলি :

ডেটটাইমটিতে এতে অসংখ্য ট্র্যাপ রয়েছে যা আপনার কোড বাগ দেওয়ার জন্য ডিজাইন করা হয়েছে:

1.- ডেটটাইমকিন্ডের সাথে ডেটটাইম মানগুলি n

২- ডেটটাইম তুলনা করার সময় ইউটিসি / লোকাল সম্পর্কে চিন্তা করে না।

৩.- ডেটটাইম মানগুলি স্ট্যান্ডার্ড ফর্ম্যাট স্ট্রিং সম্পর্কে সচেতন নয়।

৪- ডেটটাইমের সাথে একটি ইউটিসি চিহ্নিতকারী একটি স্ট্রিং পার্সিং কোনও ইউটিসি সময়ের গ্যারান্টি দেয় না।


2
আইএসও 8601 এর জন্য স্ট্রভা ব্যবহার করা হয়। তবে দয়া করে ব্যবহার করুন: স্টার্টটাইম। টুস্ট্রিং ("yyyy-MM-ddTHH: মিমি: এসএসজেড") টোস্ট্রিংয়ের পরিবর্তে ("ও") যা মিলিসেকেন্ড ইত্যাদি যুক্ত করে
পেরিটারসাম্ব্রিয়া

2
আমার জন্য, "yyyy-MM-dd-THH: মিমি: এসএসজেড" টাইমজোন চিহ্নিতকারীটির পরিবর্তে আমার স্ট্রিংয়ের শেষে আক্ষরিক অর্থে "জেড" আউটপুট করেছে, যা আমি যা চাইছিলাম তা করেন নি। টসস্ট্রিং ("ও") আসলে আমার যা প্রয়োজন তা করেছে, অনেক সহজ এবং খাটো।
ব্লেয়ার

18

অবাক করে দিয়েছিলেন যে কেউ এটিকে পরামর্শ দেয়নি:

System.DateTime.UtcNow.ToString("u").Replace(' ','T')
# Using PowerShell Core to demo

# Lowercase "u" format
[System.DateTime]::UtcNow.ToString("u")
> 2020-02-06 01:00:32Z

# Lowercase "u" format with replacement
[System.DateTime]::UtcNow.ToString("u").Replace(' ','T')
> 2020-02-06T01:00:32Z

UniversalSortableDateTimePattern আপনি কি আপনি চান প্রায় সব পথ পায় (যা আরো একটি হল বোঝায় যা RFC 3339 প্রতিনিধিত্ব)।


যোগ করা হয়েছে: আমি https://stackoverflow.com/a/43793679/653058 উত্তরের মানদণ্ডগুলি ব্যবহার করার সিদ্ধান্ত নিয়েছি কীভাবে এটি সম্পাদন করে তার তুলনা করতে ।

TL: DR; এটি ব্যয়বহুল শেষে কিন্তু এখনও আমার কৃপণ পুরাতন ল্যাপটপে আধা মিলিসেকেন্ডের চেয়ে একটু বেশি :-)

বাস্তবায়ন:

[Benchmark]
public string ReplaceU()
{
   var text = dateTime.ToUniversalTime().ToString("u").Replace(' ', 'T');
   return text;
}

ফলাফল:

// * Summary *

BenchmarkDotNet=v0.11.5, OS=Windows 10.0.19002
Intel Xeon CPU E3-1245 v3 3.40GHz, 1 CPU, 8 logical and 4 physical cores
.NET Core SDK=3.0.100
  [Host]     : .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT
  DefaultJob : .NET Core 3.0.0 (CoreCLR 4.700.19.46205, CoreFX 4.700.19.46214), 64bit RyuJIT


|               Method |     Mean |     Error |    StdDev |
|--------------------- |---------:|----------:|----------:|
|           CustomDev1 | 562.4 ns | 11.135 ns | 10.936 ns |
|           CustomDev2 | 525.3 ns |  3.322 ns |  3.107 ns |
|     CustomDev2WithMS | 609.9 ns |  9.427 ns |  8.356 ns |
|              FormatO | 356.6 ns |  6.008 ns |  5.620 ns |
|              FormatS | 589.3 ns |  7.012 ns |  6.216 ns |
|       FormatS_Verify | 599.8 ns | 12.054 ns | 11.275 ns |
|        CustomFormatK | 549.3 ns |  4.911 ns |  4.594 ns |
| CustomFormatK_Verify | 539.9 ns |  2.917 ns |  2.436 ns |
|             ReplaceU | 615.5 ns | 12.313 ns | 11.517 ns |

// * Hints *
Outliers
  BenchmarkDateTimeFormat.CustomDev2WithMS: Default     -> 1 outlier  was  removed (668.16 ns)
  BenchmarkDateTimeFormat.FormatS: Default              -> 1 outlier  was  removed (621.28 ns)
  BenchmarkDateTimeFormat.CustomFormatK: Default        -> 1 outlier  was  detected (542.55 ns)
  BenchmarkDateTimeFormat.CustomFormatK_Verify: Default -> 2 outliers were removed (557.07 ns, 560.95 ns)

// * Legends *
  Mean   : Arithmetic mean of all measurements
  Error  : Half of 99.9% confidence interval
  StdDev : Standard deviation of all measurements
  1 ns   : 1 Nanosecond (0.000000001 sec)

// ***** BenchmarkRunner: End *****

1
"ও" এর স্বীকৃত উত্তরটি কাজ করে তবে এটি বিরক্তিকর পরিমাণে নির্ভুলতা দেয় (গীজ। এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্স) যখন আমি এটি পছন্দ করি যেহেতু এটি কয়েক সেকেন্ডে থামে।
6:39

এছাড়াও সেই দস্তাবেজ দাবি করেছে যে "ইউ" আইএসও 8601, তবে টি এর পরিবর্তে স্থানটি কী? এটি একত্রে মাইক্রোসফ্ট পান
6:44 '

@jhocking en.wikipedia.org/wiki/ISO_8601#cite_note-30 আইএসও 8601 অপেক্ষাকৃত প্রশ্রয়ের হলে আপনি এটা মাধ্যমে পড়া ...
rburte

16

আমি কেবল ব্যবহার করব XmlConvert:

XmlConvert.ToString(DateTime.UtcNow, XmlDateTimeSerializationMode.RoundtripKind);

এটি স্বয়ংক্রিয়ভাবে সময় অঞ্চলটি সংরক্ষণ করবে।


আমি এগিয়ে গিয়ে একটি এক্সটেনশন পদ্ধতি যুক্ত করেছি। পাবলিক স্ট্যাটিক ক্লাস ডেটটাইম এক্সটেনশনস {পাবলিক স্ট্যাটিক স্ট্রিং টোআইসফরমেট (এই ডেটটাইম ডেটটাইম) {রিটার্ন XMLConvers.ToString (ডেটটাইম, এক্সএমএলডেটটাইমসরিয়ালাইজেশন মোড। রাউন্ডট্রিপকাইন্ড); }}
মুরগেই

14

এই উত্তরগুলির বেশিরভাগের মিলিসেকেন্ড / মাইক্রোসেকেন্ড রয়েছে যা স্পষ্টতই আইএসও 8601 দ্বারা সমর্থিত নয়। সঠিক উত্তরটি হ'ল:

System.DateTime.Now.ToString("yyyy-MM-ddTHH:mm:ssK");
// or
System.DateTime.Now.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssK");

তথ্যসূত্র:


15
"টাইমস" এর অধীনে আপনার নিজস্ব উইকিপিডিয়া লিঙ্কটি পড়ুন। এতে "দশমিক ভগ্নাংশ" উল্লেখ করা হয়েছে, যার অর্থ আইএসও 8601 মিলিসেকেন্ড এবং মাইক্রোসেকেন্ড উভয়কেই সমর্থন করে (তবে যোগাযোগের পক্ষগুলি দশমিক স্থান গ্রহণের সংখ্যাকে সীমাবদ্ধ করতে পারে)।
সেরেন বোইসেন

11
DateTime.Now.ToString("yyyy-MM-dd'T'HH:mm:ss zzz");

DateTime.Now.ToString("O");

দ্রষ্টব্য: আপনি যে রূপান্তরটি আপনার শেষের দিকে করছেন তার উপর নির্ভর করে আপনি প্রথম লাইনটি (বেশিরভাগই এটি পছন্দ করেছেন) বা দ্বিতীয়টি ব্যবহার করবেন।

শুধুমাত্র স্থানীয় সময়ে প্রয়োগ করা ফর্ম্যাটটি নিশ্চিত করুন, যেহেতু "zzz" হ'ল ইউটিসি রূপান্তরকরণের সময় অঞ্চল তথ্য।

ভাবমূর্তি


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

9

"s"প্রমিত বিন্যাস সুনির্দিষ্টভাবে উল্লেখ করা একটি কাস্টম তারিখ এবং সময় ফর্ম্যাট স্ট্রিংটি দ্বারা সংজ্ঞায়িত করা হয় প্রতিনিধিত্ব করে DateTimeFormatInfo.SortableDateTimePattern সম্পত্তি। প্যাটার্নটি একটি সংজ্ঞায়িত মান ( আইএসও 8601 ) প্রতিবিম্বিত করে এবং সম্পত্তি কেবল পঠনযোগ্য। অতএব, ব্যবহৃত সংস্কৃতি বা বিন্যাস সরবরাহকারী নির্বিশেষে এটি সর্বদা সমান। কাস্টম বিন্যাস স্ট্রিং হয়"yyyy'-'MM'-'dd'T'HH':'mm':'ss"

যখন এই স্ট্যান্ডার্ড ফর্ম্যাট স্পেসিফায়ার ব্যবহার করা হয়, ফর্ম্যাটিং বা পার্সিং অপারেশন সর্বদা আক্রমণকারী সংস্কৃতি ব্যবহার করে।

- এমএসডিএন থেকে


1
সুতরাং এটি ব্যবহার করা ঠিক আছে .ToString("s")?
আহমেটবি - গুগল

আমি তাই বিশ্বাস করি. - যতক্ষণ না আপনার প্রয়োজনীয়তাটি মূল প্রশ্নের সাথে মেলে ততক্ষণ .. তবে নীচে সাইমন উইলসনের সতর্কবার্তাটি একবার দেখুন
অমল

9

ডেটটাইম.ইউটিসি-র এখন yyyy-MM-ddTHH: মিমি: এসএসজেডের স্ট্রিং উপস্থাপনায় রূপান্তর করতে, আপনি কাস্টম বিন্যাসের স্ট্রিং সহ ডেটটাইম কাঠামোর টোস্ট্রিং () পদ্ধতি ব্যবহার করতে পারেন। ডেটটাইম সহ কাস্টম ফর্ম্যাট স্ট্রিংগুলি ব্যবহার করার সময়, এটি মনে রাখা গুরুত্বপূর্ণ যে আপনাকে একক উদ্ধৃতি ব্যবহার করে আপনার পৃথককারীদের পালাতে হবে।

নীচে আপনি যে স্ট্রিং নিন্দনটি চেয়েছিলেন তা ফিরিয়ে দেবে:

DateTime.UtcNow.ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ss'Z'", DateTimeFormatInfo.InvariantInfo)

9

এটি আকর্ষণীয় যে কাস্টম ফর্ম্যাট "yyyy-MM-ddTHH: মিমি: এসএসকে" (এমএস ছাড়াই) দ্রুততম বিন্যাস পদ্ধতি।

এছাড়াও এটি আকর্ষণীয় যে "এস" ফর্ম্যাটটি ধ্রুপদী এবং ধীরে ধীরে কোরে ...

অবশ্যই সংখ্যাগুলি খুব কাছাকাছি, কিছু সারিগুলির মধ্যে পার্থক্য নগণ্য (প্রত্যয় সহ পরীক্ষাগুলি _Verifyসেই প্রত্যয় ব্যতীত একই, ফলাফল পুনরাবৃত্তিযোগ্যতা প্রদর্শন করে)

BenchmarkDotNet=v0.10.5, OS=Windows 10.0.14393
Processor=Intel Core i5-2500K CPU 3.30GHz (Sandy Bridge), ProcessorCount=4
Frequency=3233539 Hz, Resolution=309.2587 ns, Timer=TSC
  [Host] : Clr 4.0.30319.42000, 64bit RyuJIT-v4.6.1637.0
  Clr    : Clr 4.0.30319.42000, 64bit RyuJIT-v4.6.1637.0
  Core   : .NET Core 4.6.25009.03, 64bit RyuJIT


               Method |  Job | Runtime |       Mean |     Error |    StdDev |     Median |        Min |        Max | Rank |  Gen 0 | Allocated |
--------------------- |----- |-------- |-----------:|----------:|----------:|-----------:|-----------:|-----------:|-----:|-------:|----------:|
           CustomDev1 |  Clr |     Clr | 1,089.0 ns | 22.179 ns | 20.746 ns | 1,079.9 ns | 1,068.9 ns | 1,133.2 ns |    8 | 0.1086 |     424 B |
           CustomDev2 |  Clr |     Clr | 1,032.3 ns | 19.897 ns | 21.289 ns | 1,024.7 ns | 1,000.3 ns | 1,072.0 ns |    7 | 0.1165 |     424 B |
     CustomDev2WithMS |  Clr |     Clr | 1,168.2 ns | 16.543 ns | 15.474 ns | 1,168.5 ns | 1,149.3 ns | 1,189.2 ns |   10 | 0.1625 |     592 B |
              FormatO |  Clr |     Clr | 1,563.7 ns | 31.244 ns | 54.721 ns | 1,532.5 ns | 1,497.8 ns | 1,703.5 ns |   14 | 0.2897 |     976 B |
              FormatS |  Clr |     Clr | 1,243.5 ns | 24.615 ns | 31.130 ns | 1,229.3 ns | 1,200.6 ns | 1,324.2 ns |   13 | 0.2865 |     984 B |
       FormatS_Verify |  Clr |     Clr | 1,217.6 ns | 11.486 ns | 10.744 ns | 1,216.2 ns | 1,205.5 ns | 1,244.3 ns |   12 | 0.2885 |     984 B |
        CustomFormatK |  Clr |     Clr |   912.2 ns | 17.915 ns | 18.398 ns |   916.6 ns |   878.3 ns |   934.1 ns |    4 | 0.0629 |     240 B |
 CustomFormatK_Verify |  Clr |     Clr |   894.0 ns |  3.877 ns |  3.626 ns |   893.8 ns |   885.1 ns |   900.0 ns |    3 | 0.0636 |     240 B |
           CustomDev1 | Core |    Core |   989.1 ns | 12.550 ns | 11.739 ns |   983.8 ns |   976.8 ns | 1,015.5 ns |    6 | 0.1101 |     423 B |
           CustomDev2 | Core |    Core |   964.3 ns | 18.826 ns | 23.809 ns |   954.1 ns |   935.5 ns | 1,015.6 ns |    5 | 0.1267 |     423 B |
     CustomDev2WithMS | Core |    Core | 1,136.0 ns | 21.914 ns | 27.714 ns | 1,138.1 ns | 1,099.9 ns | 1,200.2 ns |    9 | 0.1752 |     590 B |
              FormatO | Core |    Core | 1,201.5 ns | 16.262 ns | 15.211 ns | 1,202.3 ns | 1,178.2 ns | 1,225.5 ns |   11 | 0.0656 |     271 B |
              FormatS | Core |    Core |   993.5 ns | 19.272 ns | 24.372 ns |   999.4 ns |   954.2 ns | 1,029.5 ns |    6 | 0.0633 |     279 B |
       FormatS_Verify | Core |    Core | 1,003.1 ns | 17.577 ns | 16.442 ns | 1,009.2 ns |   976.1 ns | 1,024.3 ns |    6 | 0.0674 |     279 B |
        CustomFormatK | Core |    Core |   878.2 ns | 17.017 ns | 20.898 ns |   877.7 ns |   851.4 ns |   928.1 ns |    2 | 0.0555 |     215 B |
 CustomFormatK_Verify | Core |    Core |   863.6 ns |  3.968 ns |  3.712 ns |   863.0 ns |   858.6 ns |   870.8 ns |    1 | 0.0550 |     215 B |

কোড:

    public class BenchmarkDateTimeFormat
    {
        public static DateTime dateTime = DateTime.Now;

        [Benchmark]
        public string CustomDev1()
        {
            var d = dateTime.ToUniversalTime();
            var sb = new StringBuilder(20);

            sb.Append(d.Year).Append("-");
            if (d.Month <= 9)
                sb.Append("0");
            sb.Append(d.Month).Append("-");
            if (d.Day <= 9)
                sb.Append("0");
            sb.Append(d.Day).Append("T");
            if (d.Hour <= 9)
                sb.Append("0");
            sb.Append(d.Hour).Append(":");
            if (d.Minute <= 9)
                sb.Append("0");
            sb.Append(d.Minute).Append(":");
            if (d.Second <= 9)
                sb.Append("0");
            sb.Append(d.Second).Append("Z");
            var text = sb.ToString();
            return text;
        }

        [Benchmark]
        public string CustomDev2()
        {
            var u = dateTime.ToUniversalTime();
            var sb = new StringBuilder(20);
            var y = u.Year;
            var d = u.Day;
            var M = u.Month;
            var h = u.Hour;
            var m = u.Minute;
            var s = u.Second;
            sb.Append(y).Append("-");
            if (M <= 9)
                sb.Append("0");
            sb.Append(M).Append("-");
            if (d <= 9)
                sb.Append("0");
            sb.Append(d).Append("T");
            if (h <= 9)
                sb.Append("0");
            sb.Append(h).Append(":");
            if (m <= 9)
                sb.Append("0");
            sb.Append(m).Append(":");
            if (s <= 9)
                sb.Append("0");
            sb.Append(s).Append("Z");
            var text = sb.ToString();
            return text;
        }

        [Benchmark]
        public string CustomDev2WithMS()
        {
            var u  = dateTime.ToUniversalTime();
            var sb = new StringBuilder(23);
            var y  = u.Year;
            var d  = u.Day;
            var M  = u.Month;
            var h  = u.Hour;
            var m  = u.Minute;
            var s  = u.Second;
            var ms = u.Millisecond;
            sb.Append(y).Append("-");
            if (M <= 9)
                sb.Append("0");
            sb.Append(M).Append("-");
            if (d <= 9)
                sb.Append("0");
            sb.Append(d).Append("T");
            if (h <= 9)
                sb.Append("0");
            sb.Append(h).Append(":");
            if (m <= 9)
                sb.Append("0");
            sb.Append(m).Append(":");
            if (s <= 9)
                sb.Append("0");
            sb.Append(s).Append(".");
            sb.Append(ms).Append("Z");
            var text = sb.ToString();
            return text;
        }
        [Benchmark]
        public string FormatO()
        {
            var text = dateTime.ToUniversalTime().ToString("o");
            return text;
        }
        [Benchmark]
        public string FormatS()
        {
            var text = string.Concat(dateTime.ToUniversalTime().ToString("s"),"Z");
            return text;
        }

        [Benchmark]
        public string FormatS_Verify()
        {
            var text = string.Concat(dateTime.ToUniversalTime().ToString("s"), "Z");
            return text;
        }

        [Benchmark]
        public string CustomFormatK()
        {
            var text = dateTime.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssK");
            return text;
        }

        [Benchmark]
        public string CustomFormatK_Verify()
        {
            var text = dateTime.ToUniversalTime().ToString("yyyy-MM-ddTHH:mm:ssK");
            return text;
        }
    }

https://github.com/dotnet/BenchmarkDotNet ব্যবহার করা হয়েছিল



2

যদি আপনি শেয়ারপয়েন্ট 2010 এর অধীন বিকাশ করছেন বা ততোধিক উচ্চতর আপনি ব্যবহার করতে পারেন

using Microsoft.SharePoint;
using Microsoft.SharePoint.Utilities;
...
string strISODate = SPUtility.CreateISO8601DateTimeFromSystemDateTime(DateTime.Now)

20
শেয়ারপয়েন্ট, যখন আপনার। নেট জাভা যথেষ্ট নয়।
হেনরিক

18
এর জন্য শেয়ারপয়েন্ট ব্যবহার করা একধরণের জেলির টব, ম্যাচের একটি ভেজা বাক্স এবং 2 ট্র্যাপিজ-ওয়াকিং শিম্পাঞ্জিকে বন্দুক লড়াইয়ে আনার মতো।
নাথানছের

এমনকি শেয়ারপয়েন্টেও আশা করি আপনি ছাত্রলীগের ব্যবহার করতে পারেন .ToString("o")বা আরও ভাল $"My complicated string {dt:o}",।
বিনকি

2

2018-06-22T13: 04: 16 এর মতো ফর্ম্যাট করতে যা এপিআই ব্যবহারের ইউআরআইতে পাস করা যেতে পারে:

public static string FormatDateTime(DateTime dateTime)
{
    return dateTime.ToString("s", System.Globalization.CultureInfo.InvariantCulture);
}

1
আমি মনে করি এই আইএসও তারিখের স্ট্রিংটি সংজ্ঞা অনুসারে সংস্কৃতি আগ্রাসী।
জোনাস

1

অন্যান্য উত্তরে যেমন উল্লেখ করা হয়েছে, DateTime নকশার দ্বারা সমস্যা রয়েছে।

NodaTime

আমি তারিখ / সময় মানগুলি পরিচালনা করতে নোডটাইম ব্যবহার করার পরামর্শ দিচ্ছি :

  • স্থানীয় সময়, তারিখ, তারিখের সময়
  • গ্লোবাল সময়
  • টাইমজোন সহ সময়
  • কাল
  • স্থিতিকাল

বিন্যাস করা

সুতরাং, তৈরি করতে এবং ফর্ম্যাট ZonedDateTimeকরতে আপনি নিম্নলিখিত কোড স্নিপেট ব্যবহার করতে পারেন:

var instant1 = Instant.FromUtc(2020, 06, 29, 10, 15, 22);

var utcZonedDateTime = new ZonedDateTime(instant1, DateTimeZone.Utc);
utcZonedDateTime.ToString("yyyy-MM-ddTHH:mm:ss'Z'", CultureInfo.InvariantCulture);
// 2020-06-29T10:15:22Z


var instant2 = Instant.FromDateTimeUtc(new DateTime(2020, 06, 29, 10, 15, 22, DateTimeKind.Utc));

var amsterdamZonedDateTime = new ZonedDateTime(instant2, DateTimeZoneProviders.Tzdb["Europe/Amsterdam"]);
amsterdamZonedDateTime.ToString("yyyy-MM-ddTHH:mm:ss'Z'", CultureInfo.InvariantCulture);
// 2020-06-29T12:15:22Z

আমার জন্য NodaTimeকোড বেশ ভার্জোজ দেখাচ্ছে। তবে প্রকারগুলি সত্যই কার্যকর। তারা তারিখ / সময় মানগুলি সঠিকভাবে পরিচালনা করতে সহায়তা করে।

Newtonsoft.Json

এর সাথে ব্যবহারের NodaTimeজন্য Newtonsoft.Jsonআপনাকে NodaTime.Serialization.JsonNetনুগেট প্যাকেজটিতে রেফারেন্স যুক্ত করতে হবে এবং জেএসএন বিকল্পগুলি কনফিগার করতে হবে।

services
    .AddMvc()
    .AddJsonOptions(options =>
    {
        var settings=options.SerializerSettings;
        settings.DateParseHandling = DateParseHandling.None;
        settings.ConfigureForNodaTime(DateTimeZoneProviders.Tzdb);
    });
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.