スケジュールを使用して、アプリケーションで24時間フォーマットの時刻について計算を実行する必要があります。たとえば、17h + 12h=5hです。独自の構造体を作成して、またはTime
をラップアラウンドしようとしました。正常に動作していますが、で実行するフォーマットに行き詰まっています。TimeSpan
DateTime
ToString
確かに、私はもちろん、私の構造体がどのような文化の下でも機能できるようにしたいと思っています。最初は、フォーマットを構造体に委任し、DateTime
厳密に時間に関連しないすべてのカスタムフォーマットをスキップすることを考えていました。TimeSpan
たとえば、一部のカルチャで使用されるAM / PMを処理しないため、このタスクをに委任することはできません。たとえば、私のTime
構造では次のように書いています。
public string Format(string format, IFormatProvider provider)
{
return TimeFormat.Format(this, format, DateTimeFormatInfo.GetInstance(provider), provider);
}
// ...
internal class TimeFormat
{
internal string Format(Time time, string format, DateTimeFormatInfo dtfi, IFormatProvider provider)
{
DateTime dt = new DateTime(DateTime.MinValue, 1, 1, time.Hours, time.Minutes, time.Seconds, time.Milliseconds);
/* Here I am checking what the 'format' string is made of
and filter-out anything that is not strictly-time related. */
return dt.Format(format, provider);
}
}
ToString
構造体のメソッドがDateTime
mscorlibにどのように実装されているかを調べました。そして、すごい...考慮すべき非常に多くのもの。そこにあったものを多かれ少なかれ書き直したかったのですが、時間に関連するものだけを残しましたが、これにはすべてが混同されており、理解するのは簡単ではありません。また、ヘブライ語の書式設定など、処理するのが明らかに簡単ではないものがあることに気づきました。これをすべて書き直すと思っていたよりもはるかに時間がかかります。特に自分が何をしているのかをはっきりと理解せずにやりたくない。
要約すると:
- 時刻の「すべてのカルチャに準拠した」フォーマットを作成するにはどうすればよいですか?
- 1つ上のレベルで、またはのラッパーを使用して問題を正しく処理しています
DateTime
かTimeSpan
?直接使用することはできませんTimeSpan
:負の時間で動作しています(厳密に0から23:59:59.999の間の時間を使用するためにモジュロを使用しています)、一部のカルチャではAM / PMを処理せず、Day
sを使用します。私にとって、「時間帯」は「時間帯」とは異なります。 - カレンダーに依存しないコンテキストであるため、タイムゾーンやDSTを処理する必要はなく、うるう秒も必要ありませんが、時刻のローカライズされたフォーマットを処理できるようにしたいと考えています。(たとえば、「:」の代わりに「H」(またはヘブライ語、中国語、タミル語、ロシア語の文字)を使用するか、24時間形式の代わりにAM / PMを使用します)。
いくつかのライブラリやチュートリアルを紹介するためのヒントやヘルプが役立ちます。