2016-06-14 12 views
1

Noda Timeを使用してローカル日時からUTCに変換しています。.NET Noda Timeローカル日付時刻を特定のタイムゾーンのUTCに変換する

static string LocalTimeToUTC(string timeZone, string localDateTime) 
{ 
    var pattern = LocalDateTimePattern.CreateWithInvariantCulture("dd/MM/yyyy HH:mm:ss"); 
    LocalDateTime ldt = pattern.Parse(localDateTime).Value; 
    ZonedDateTime zdt = ldt.InZoneLeniently(DateTimeZoneProviders.Tzdb[timeZone]); 
    Instant instant = zdt.ToInstant(); 
    ZonedDateTime utc = instant.InUtc(); 
    string output = utc.ToString("dd/MM/yyyy HH:mm:ss", CultureInfo.InvariantCulture); 

    return output; 
} 

static void Main(string[] args) 
{ 
    foreach (DateTime d in myDates) 
    { 
     DateTime utcTime = Convert.ToDateTime(LocalTimeToUTC("Europe/Amsterdam", d.ToString())); 
     Console.WriteLine(utcTime); 
    } 

    Console.ReadKey(); 
} 

問題が夏時間である:クロックが後方に1時間になると

は、これは私がこれまで持っているものです。時間がありません。下記の結果をご覧ください。

25/10/2014 19:00:00 
    25/10/2014 20:00:00 
    25/10/2014 21:00:00 
    25/10/2014 22:00:00 
    25/10/2014 23:00:00 
    26/10/2014 01:00:00 
    26/10/2014 02:00:00 

ご覧のとおり、26/10/2014 00:00:00は時計の変更のためにありません。

私の質問は、欠けている時間がないようにこれを処理する方法があるということですか?不足している時間を埋める?

+0

ここでは、テキスト解析を行う必要はありません。「LocalDateTime.FromDateTime」はあなたの友人です。 –

答えて

1

時計が戻ってきたため、両方が同じ現地時間に対応する2つのUTCインスタントが存在するため、1時間足らずです。 「欠落時間」を避ける唯一の方法は、2つのエントリをあいまいな現地時間で発行することです。

の経過時間ごとに1つのエントリで、UTCからローカル時刻に、テーブルに他の方法でラウンドを見てみましょう:

UTC      Local time 
2014-10-25 21:00:00Z  2014-10-25 23:00:00 +02 
2014-10-25 22:00:00Z  2014-10-26 00:00:00 +02 
2014-10-25 23:00:00Z  2014-10-26 01:00:00 +02 
2014-10-26 00:00:00Z  2014-10-26 02:00:00 +02 
2014-10-26 01:00:00Z  2014-10-26 02:00:00 +01 (clocks back!) 
2014-10-26 02:00:00Z  2014-10-26 03:00:00 +01 

だから左側の6つの異なる値がありますが、唯一の5の異なります右側の値。

あなたは0、1または2の値が(前方に起因ジャンプに)ローカルの日付/時刻がスキップされたかどうかに応じて含まれていますZoneLocalMappingを取得するためにDateTimeZone.MapLocal(LocalDateTime)を使用することができますが、明確な、または(バックによるジャンプに)繰り返し。それはかもしれません。はあなたが望むものを与えますが、達成しようとしていることや入力データが表すものは本当に明確ではありません。

+0

お返事ありがとうございます。しかし、私はそれがあなたが意味することを理解していないのですか?可能であれば、コードに記入してください。 –

+0

@Abz:正確には何ですか?私のポストにはたくさんのことがあります。私はあなたが達成しようとしていることの明確なアイデアを提供していないときに、推論的にコードを書くのではなく...あなたのメソッドは現在、単一の 'string'を返すことしかできません。あいまいなローカル値を持つ –

+0

申し訳ありませんが、私はより具体的にすべきでした。基本的には、データベースから日付(ローカルタイム)を取得し、それぞれのタイムゾーン(ヨーロッパ/アムステルダム)のUTCに変換しようとしています。 –

関連する問題