this の逆を実現したい、つまり、フォーマットhh:mm tt
のstring
をゼロ秒のTimeSpan
に変換したい。
たとえば、09:45 pm
は21:45:00
に変換されます。
最も簡単なアプローチは、おそらくDateTime.ParseExact
を使用してDateTime
として解析し、次に TimeOfDay
を使用してTimeSpan
を正確にすることです。 。
DateTime dateTime = DateTime.ParseExact(text,
"hh:mm tt", CultureInfo.InvariantCulture);
TimeSpan span = dateTime.TimeOfDay;
Am = pm指定子をまた指定している場合、時間の先頭に0が表示されるのは奇妙です。 「09:45 pm」の代わりに「9:45 pm」を許可するために、フォーマット文字列で「hh」の代わりに「h」が必要になる場合があります。
(また、最初はTimeSpan
の奇妙な使い方だと主張しますが、.NETの日付/時刻型は、私の見解ではやや混乱しています。 Noda時間 、しかし私は偏っている:)
この仕事は私にとって。
TimeSpan ts= DateTime.Parse("8:00 PM").TimeOfDay;
TimeSpan tspan;
tspan = DateTime.ParseExact("01:45 PM", "hh:mm tt", CultureInfo.InvariantCulture).TimeOfDay;
以下のコードスニペットを使用して、メリディエム時間をタイムスパンに変換し、タイムスパンを日付と時間のみのメリディエム時間に変換することもできます...
TimeSpan ts = DateTime.Parse("8:00 PM").TimeOfDay;
DateTime dateWithTimeSlot = DateTime.Today+ ts;
//for getting MM/dd/yyyy hh:mm tt format
string dateWithMeridiemTimeSlot =
dateWithTimeSlot.ToString("MM/dd/yyyy hh:mm tt: ", CultureInfo.InvariantCulture);
Console.WriteLine("For getting MM/dd/yyyy hh:mm tt format: "+dateWithMeridiemTimeSlot);
//for getting only hh:mm tt format
string meridiemTimeSlot =
dateWithTimeSlot.ToString("hh:mm tt", CultureInfo.InvariantCulture);
Console.WriteLine("For getting only hh:mm tt format: " + meridiemTimeSlot);
Console.ReadLine();
楽しもう!
ありがとう