2017-01-25 24 views
0

メキシコの日付と時刻をUTCの日付と時刻に変換する際に使用したコードを参照してください。UTCの日付時間をメキシコの日付時刻に変換する方法

string strDateTime = "25/01/2017 07:31:00 AM"; 
    DateTime localDateTime = DateTime.Parse(strDateTime); 
    DateTime univDateTime = localDateTime.ToUniversalTime(); 

ToUniversalTimeリターンUTC 25-01-2017 02:01:00

私はメキシコ現地時間に同じUTCの日付と時刻UTC 25-01-2017 02:01:00を変換しようとすると、再び、私は24-01-2017 06:01:00

を得たので、右されていない07:31:00 AM becomes 06:01:00を参照してください。タイムゾーン情報を使用してutcからメキシコの時刻に変換するときに、間違った現地時間になっている私のコードに何が欠けているか教えてください。

タイムゾーン情報を使用してutcからメキシコの現地時間に変換するコードを参照してください。 ...たぶん何かあなたは、このいずれかのTimeZoneInfo.ConvertTime() APIを利用したいとしている

:物事を少し変更 -

string strDateTime = "25-01-2017 02:01:00"; 
    DateTime utcDateTime = DateTime.Parse(strDateTime); 
    string nzTimeZoneKey = "Pacific Standard Time (Mexico)"; 
    TimeZoneInfo nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById(nzTimeZoneKey); 
    DateTime nzDateTime = TimeZoneInfo.ConvertTimeFromUtc(utcDateTime, nzTimeZone); 
+0

あなたは 'TimeZoneInfo.Local'を入力すると、あなたが得る結果かどうか確認することはできますか? –

+0

「太平洋標準時(メキシコ)」は、バハ・カリフォルニア半島の北部を対象としています。都市にはティファナとメヒカリがあり、スペイン語で「ゾーナ・ノロエステ」と呼ばれています。メキシコの "Zona Pacifico"ではありません。 [Wikipediaのメキシコの記事の記事](https://en.wikipedia.org/wiki/Time_in_Mexico)を参照してください。メキシコには4つのタイムゾーンがありますので、必ず正しいタイムゾーンを選んでください。 –

+0

また、WindowsのタイムゾーンID「太平洋標準時(メキシコ)」と「太平洋標準時」の間に論理的な違いはありません。メキシコの一部の地域では、メキシコのDST移行日(米国の移行日ではなく)が使用されていたと考えられていましたが、それは真実ではなく、データが修正されました。その全体の領域は、米国のDST遷移(メキシコのものではない)と位置合わせされています。 –

答えて

2

さて、私はあなたがインドに位置していたことを知りませんでした以下のような:

var dt = new DateTime(2017, 01, 25, 7, 31, 0).ToUniversalTime(); 
    var nzTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time (Mexico)"); 
    //var ist = TimeZoneInfo.FindSystemTimeZoneById("India Standard Time"); 
    DateTime nzDateTime = TimeZoneInfo.ConvertTime(dt, TimeZoneInfo.Utc, nzTimeZone); 
+0

私の日付の時刻形式が間違っている場合、datetimeの解析でどのように解析できますか? – Mou

+0

あなたのコードが正常に実行された場合、それは問題なく解析されますが、期待通りのものではありません。 [MSDN](https://msdn.microsoft.com/en-us/library/az4se3k1(v = vs.110).aspx)の日付形式を参照してください。日付の文字列形式も表示されません –

+0

を使用しようとしていますが、私はあなたのコードを実行しますが、私は '07:31:00'の代わりに' 06:01:00'の間違った時刻を取得しています。 VS2013 IDEのデバッグ画面のスクリーンショットをアップロードできますような場合は – Mou

2

あなたは現在のタイムゾーン(UTC+05:30)あなたが(UTC-8:00)に変換している時間帯は異なっています。だからあなたは違いを得る。元のタイムゾーンからターゲットのタイムゾーンまで約13時間30分の差があります。 5:30 - (-8) = 13:30

元の日付から13時間30分を差し引くと、18:01:00となり、12時間形式では前日の6PMになります。

編集:代わりにハードコーディングメキシコのタイムゾーンの

、あなたは関係なく、彼らがどこから来ているユーザーのタイムゾーンを決定しないことができる方法を持っている必要があります。これは、this answerで概要を説明したJavaScriptを使用して行うのが最適です。

+0

プログラムでそれを行う方法。それを達成するためのコードを投稿してください。ありがとう – Mou

+0

「13時間30分を差し引く」ハードコードしたくありません。UTCの日付と時刻をタイムゾーン情報を提供するクライアントのローカル時刻に変換したいと思います。 – Mou

+1

ハードコーディングはありません。これはあなたの現地時間に対応するクライアントの現地時間です。朝にいるときは夜になり、これに間違いはありません。だからコードは問題ありません。本当の疑問は、あなたは何を達成しようとしているのですか?私のWebアプリケーションユーザーのために –

1

あなたの問題は、Parseがタイムゾーンを指定せずに行われることです。そのため、システムはコンピュータのデフォルト値を使用します。あなたのコンピュータはPSTではないようです。むしろインドのどこか。

したがって、DateTimeオブジェクトに変換した後は、PSTタイムゾーンを指定してUTCに変換する必要があります。これを行うにはいくつかの方法があります。

  1. 文字列の一部としてタイムゾーンオフセットを指定します。
  2. コールTimeZoneInfo.ConvertTimeToUtcの1と指定timezoneid

は、たぶん、あなたがしたいすべてがConvertTimeまたはConvertTimeByTimeZoneIdを呼び出すことにより、2つのタイムゾーン間の変換です。例えば


    string pst = "Pacific Standard Time"; 
    TimeZoneInfo.ConvertTimeBySystemTimeZoneId(currentTime, TimeZoneInfo.Local.Id, pst)); 

:7:30 PST 1:30 UTCであるべきである - ない2:30。それは最初の変換の問題を示唆しています。午前2時から太平洋標準時までは、確かに午後6時です。また、私はあなたの入力が7:31だったことに気付きました。あなたはそれが2:01を出力したと主張します - メキシコは30分のタイムゾーンをしますか?私はインドが知っている。

私は、文字通り「PSTの午前2時01分UTC」を検索することによって、変換をテストするには、Googleを使用して、それは比較のための答えを返します。

は、解析のための入力タイムゾーンを宣言示し、この他の記事を参照してください。また、DSTの変換は必要ありません。 TimeZoneInfoのためのMSDNのDoes ConvertTimeFromUtc() and ToUniversalTime() handle DST?

さらに詳しい情報:https://msdn.microsoft.com/en-us/library/bb495915(v=vs.110).aspx

+0

あなたがここで私のコード例を修正するために私にはあまり明確ではないと言ったもの。あなたが私の投稿されたコードを見て、それを修正した後にここに投稿すると助けになるでしょう。基本的に私は日付と時刻をメキシコの日付と時刻に変換したい。 – Mou

関連する問題