0

timestampAndroid アプリケーションで Access 2003 データベースのを使用しようとしています。Webサーバーを介して、longフィールドサイズが「長整数」でフォーマットが「日付、短」の日付フィールドを取得します。

ロングは次のようになります。41574

Dateこの long をJava/Androidのクラスで使用できる date/long に変換するにはどうすればよいですか?

4

1 に答える 1

1

日付などの内部表現を操作するために「独自の」手順を作成するのは危険です。Eric Lippertは、特に Access (および VBA、VBScript) で使用される日付形式に関連する優れたブログ エントリをここに書いています。

最善の解決策は、Web サービスを修正して、 のような実際の明確な日付値を渡すようにすることyyyy-mm-ddです。ただし、それが不可能な場合は、次を使用する傾向があります。

import java.text.ParseException;
import java.text.SimpleDateFormat;

public class dateTestMain {

    public static void main(String[] args) {
        long accessDateNumberToTest;
        for (accessDateNumberToTest = -2; accessDateNumberToTest <= 2; accessDateNumberToTest++) {
            long ms_since_1970_01_01 = (accessDateNumberToTest - 25569) * 86400000;
            java.util.Date utcDate = new java.util.Date(ms_since_1970_01_01);

            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

            // dump date to string as UTC...
            sdf.setTimeZone(java.util.TimeZone.getTimeZone("UTC"));
            String utcDateString = sdf.format(utcDate);

            // ...and parse back to Date in local timezone
            sdf.setTimeZone(java.util.TimeZone.getDefault());
            java.util.Date jDate = null;
            try {
                jDate = sdf.parse(utcDateString);
                System.out.println(String.format("Java test: %s maps to %s", accessDateNumberToTest, jDate));
            } catch (ParseException e) {
                e.printStackTrace();
            }
        }
    }

}

上記のコードのforループは、アクセス日付の「数字」の範囲をテストして、変換が負から正への移行を適切に処理することを確認するだけです。Javaコードは次を返します...

Java test: -2 maps to Thu Dec 28 00:00:00 EST 1899
Java test: -1 maps to Fri Dec 29 00:00:00 EST 1899
Java test: 0 maps to Sat Dec 30 00:00:00 EST 1899
Java test: 1 maps to Sun Dec 31 00:00:00 EST 1899
Java test: 2 maps to Mon Jan 01 00:00:00 EST 1900

...そして、を使用したAccess VBAテストCDate(num)は同意しているようです

Access VBA test: -2 maps to 1899-12-28 00:00:00
Access VBA test: -1 maps to 1899-12-29 00:00:00
Access VBA test: 0 maps to 1899-12-30 00:00:00
Access VBA test: 1 maps to 1899-12-31 00:00:00
Access VBA test: 2 maps to 1900-01-01 00:00:00

また、Excel スプレッドシートのセルで日付として書式設定された数値とは異なり、数値 60 は にマップされません1900-02-29。(1900 年はうるう年ではなかったので、これは有効な日付ではありません。Excel での動作は、以前の Lotus 1-2-3 バグの遺産です。) Java の結果は...

Java test: 58 maps to Mon Feb 26 00:00:00 EST 1900
Java test: 59 maps to Tue Feb 27 00:00:00 EST 1900
Java test: 60 maps to Wed Feb 28 00:00:00 EST 1900
Java test: 61 maps to Thu Mar 01 00:00:00 EST 1900
Java test: 62 maps to Fri Mar 02 00:00:00 EST 1900

...Access VBA テストに同意します。

Access VBA test: 58 maps to 1900-02-26 00:00:00
Access VBA test: 59 maps to 1900-02-27 00:00:00
Access VBA test: 60 maps to 1900-02-28 00:00:00
Access VBA test: 61 maps to 1900-03-01 00:00:00
Access VBA test: 62 maps to 1900-03-02 00:00:00
于 2013-10-23T13:56:51.410 に答える