異邦人になってみた~~上海生活写真ブログ

中国上海市在住です。もう10年を超えました。休日は星空(天の川)撮影やポートレート撮影等、連休時はカメラを持って中国各地を旅行してます。最近は内モンゴル自治区によく行っています。

 このブログについて(about)
  中国旅行/観光/写真記事一覧(省別)

C#とJAVAの日付(DateTimeとDate)の違い。

言語による日付保持方法の違い。(JAVA and C#

サーバーとクライアント(スマホ)などで言語が違っている場合。
時間を数値として受け渡す場合に問題が発生することがあります。
JAVAのDateクラスと.NETのDateTimeクラス
Java1970-01-01 00:00:00からの経過時間になっている
.NET0000-01-01 00:00:00からの経過時間になっている
そのためJAVAのDate.getTime()とC#のDateTime.Ticks()では取得できる値が違う。
変換してあげる必要があります。
最初は全然知らないでやってたんで日付が全然合わなくてなんでだろうという話になりました。
微妙な違いがあるんですね。

private static final long EPOCH_VALUE = 62135596800000L;//0000年から1970年までのミリ秒
private static final int RATE_100NANOSECONDE_PERMILLISECOND = 10000;

// JAVAのミリ秒化成を.NETナノ秒に変換
public static long convertSecondToDotNet(long milliSeconds) {
// (JAVA的毫秒数 + "1970-01-01 00:00:00.000"的毫秒数) * 10000
return (milliSeconds + EPOCH_VALUE) * RATE_100NANOSECONDE_PERMILLISECOND;
}

// .NETナノ秒JAVAのミリ秒に変更
public static long convertSecondFromDotNet(long hundredNanoSeconds) {
// .NET百纳秒 / 10000 - "1970-01-01 00:00:00.000"的毫秒数
BigDecimal dec = new BigDecimal(hundredNanoSeconds);
dec = dec.divide(BigDecimal.valueOf(RATE_100NANOSECONDE_PERMILLISECOND));
return dec.longValue() - EPOCH_VALUE;
}