2012-05-03 8 views
0

私のアプリケーションは、Windows OSを搭載したあらゆる種類のマシンで実行できます。今度は、javaで構築されたサーバホストレストAPIと通信します。 window7マシンでC#utc書式を渡す日付の時刻

utc : 03-05-2012 10:48:22 
utc : 03-05-2012 10:48:22 
normal : 03-05-2012 16:18:22 

Windowsサーバー2008R2マシンで

-

今私は、その出力は次のようである。この

Console.WriteLine("utc : " + DateTime.UtcNow); 
Console.WriteLine("utc : " + DateTime.Now.ToUniversalTime()); 
Console.WriteLine("normal : " + DateTime.Now); 

のようにUTC形式で時刻をフェッチしようとしています

utc : 5/3/2012 10:47:35 AM 
utc : 5/3/2012 10:47:35 AM 
normal : 5/3/2012 4:17:35 PM 

今、サーバーマシン上でAM/PMとutc時間を与えるが、window7マシンではAM/PMなしの時間を与えるのはなぜですか?

同じ形式ですべての種類のWindows OSで同じutc時刻を返すメソッドがありますので、java guyには解析の問題はありませんか?

ありがとう

+1

本質的に 'yyyy-MM-ddTHH:mm:ss'形式の' ToString( "s") 'を使うといいです。 – V4Vendetta

+0

他の人がどのように解析しているのか分かりません。彼は私に、単一の種類のフォーマットのみを提供するように頼んだ。午前/午後または午後のいずれかで。 – sunder

+0

@sunder V4Vendettaが提案しているように、このような種類の通信には通常「ソート可能な日付/時刻パターン」を使用しています –

答えて

0

基本的にyyyy-MM-ddTHH:mm:ss形式のToString( "s")を使用すると、異なる文化を持つ異なるOSで同じフォーマットを使用できます。

この種の通信には、通常、「ソート可能な日付/時刻パターン」を使用しています。

V4Vendettaとそのコメントのおかげで、

同じ問題がある同じ投稿を読んでいる他の人がいるでしょう。

0

あなたはとCustom Date and Time Format Stringsを使用することができます。

DateTime.ToString("format string", IFormatProvider) 

例:上記のコードで

DateTime.ToString("dd MM yyyy", CultureInfo.InvariantCulture); 

、 "書式文字列は" それは何もないのJava

+0

使用する 'CultureInfo'を指定していないが、まだ取得しますあなた(潜在的に)異なる文字列。 –

+0

@ Christian.K - はい、変更、ありがとうございます。 – logicnp

2

によって予想1であることを確認してくださいOSと必ずする必要があります。コードが実行されるロケールと同じです。マシンが異なるロケールで設定され、その違いを考慮する可能性があります。

フォーマットを正確に制御する必要がある場合は、DateTime.String(string format)メソッドを使用して手動でフォーマットを指定してカスタムフォーマット文字列を使用する必要があります。

0

(アプリケーション間で合意)日付シリアル化する

C位日付に使用されるべき特定のフォーマットを指定する:

DateFormat formatter = new SimpleDateFormat("d/M/yyyy HH:mm:ss"); 
Date date = (Date) formatter.parse(dateToParse); 
+0

私の友人、このstring.formatは、同じ結果を同じ形式で返すようになりました。AM/PMのないwindow7では、AM/PMのあるWindows server R2では。 両方のマシンは同じフォーマットですが、AM/PMと別のマシンでは1つです。 – sunder

0

ワン:日付を解析する

Console.WriteLine("utc : " + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.UtcNow)); 
Console.WriteLine("utc : " + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.Now.ToUniversalTime())); 
Console.WriteLine("normal : " + String.Format("{0:d/M/yyyy HH:mm:ss}", DateTime.Now)); 

Javaのあなたは、ミリ秒単位で時間を送信し、Java終了時にミリ秒をdateTimeに変換することができます。

0

Noda Timeライブラリを使用すると、一貫した結果が得られます。

関連する問題