2016-07-04 11 views
0

さまざまな文字列をローカルタイムゾーン(.ToLocalTime())に変換する必要がありますが、通常のDateTime文字列とは異なり、日時(それらがUTCにすることになっている)ので、のように:日時(曜日)と時刻を文字列として別のタイムゾーンに変換する方法

SUNDAY:17:00 
FRIDAY:16:50 
MONDAY:20:50 
THURSDAY:07:00 

私はローカルタイムゾーンにこれらの文字列を「変換」する巧妙な方法を探していますが、私はこのうちのDateTimeを取得することはできませんので、私は避けたい手動でそれをしなければならないでしょう。 (また、私は文字列を分割したくない...)

+0

DateTimeをまったく使用しないでください。明示的なオフセットでDateTimeOffsetを使用してください。結局のところ、Jsonはまた、オフセットを使用して –

答えて

1

オフセットは、他の(非DST対DST)に1日から変更する可能性があるため、あなたは、正確な日付を知らなくても正しくTimeZoneOffsetを扱うことができません。

正しい時刻を取得するのは簡単です(正しい日付がある場合)。DateTimeの適切なコンストラクタを使用します。

DateTime(int year, int month, int day, int hour, int minute, int second, System.DateTimeKind kind) 

とし、System.DateTimeKind.Utcと指定します。次に、UTC時刻としてタイムスタンプを取得してから、ToLocalTime()を使用して、ローカルタイムゾーンで正しい時刻を取得できます。

難しい部分は私のようですが、あなたのデータから正しい日付を取得しています。 SUNDAYの意味は次のもの(2016-07-10)か、最後のもの(2016-07-03)ですか?これは、DSTの切り替えに近い日付の場合に特に重要です。これは、タイムスタンプが異なる可能性があるためです。

また、 '日曜日:23:00'のUTCは、一部のタイムゾーンで 'MONDAY:01:00'(またはその逆)になる可能性があることにも注意してください。だから、あなたの現地時間ではなく、UTCに基づいて日付の計算を行う必要があります。たとえば、現地時間では2016年7月1日01:00の月曜日ですが、これは日曜日2016-07-03 23:00(UTC)で、タイムスタンプSUNDAY:17:00を解釈して現地時間を使用します日曜日)は2016-07-03 19:00の代わりに2016-07-10 19:00になります。

+0

これらの時間文字列 'SUNDAY:17:00'は、現時点では常にUTCになっています。正確な日付は常にDateTime.UtcNowです。したがって、ダビデのアプローチはうまくいくでしょうか? – zlZimon

+0

別の日にあれば、どうすれば今できるのですか? – derpirscher

+0

ちょっと誤解を招いていた。常にUtcNowである現在の日付の観点から。だから今日私が今日05.07.2016の文字列を見ているとき、それらの文字列は "次の"日です – zlZimon

1

DateTime Constructorを使用して日付を作成し、通常のDateTimeのように変換できますか?

この例を確認し、必要なものに置き換えてください。

var theDate = new DateTime (DateTime.Today.Year, DateTime.Today.Month, DateTime.Today.Day, hours, minute, second); 

ドキュメントから:

public DateTime(
    int year, 
    int month, 
    int day 
) 

DateTime date1 = new DateTime(2010, 8, 18); 
Console.WriteLine(date1.ToString()); 
// The example displays the following output: 
//  8/18/2010 12:00:00 AM 
+0

私はどうにかして文字列を分割し、時間を取得し、intに 'DateTime'を取得することを避けることができると思った。 – zlZimon

関連する問題