1

このコードを使用して、日付文字列を UNIX タイムスタンプに変換します。

int year = 2012;
int month = 2; // eg. for march
int day = 31;
int hrs = 0;
int min = 18;

これは、英語表記で 31.3.2012 00:18 または 3/31/2012 00:18 の日付/時刻を表す必要があります。

Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Berlin")); // GMT+1
cal.set(year, month, day, hrs, min);
unixtime = cal.getTimeInMillis() / 1000;

unixtime の結果は次のとおり1333145929 ですcal.setTimeInMillis(1333145929 * 1000);30.3.2012 00:18

1日損した!

4

5 に答える 5

2

どのように印刷していCalendarますか?

GMT 時刻を取得していると思いますが、これは 1 時間遅れているため、午前 0 時に 1 日遅れています。

検討:

public static void main(String[] args) throws Exception {
    int year = 2012;
    int month = 2; // eg. for march
    int day = 31;
    int hrs = 0;
    int min = 18;
    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Berlin")); // GMT+1
    cal.set(year, month, day, hrs, min);
    long time = cal.getTimeInMillis();
    System.out.println(time);
    cal.setTimeInMillis(time);
    final DateFormat sdf = SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.FULL, SimpleDateFormat.FULL);
    System.out.println(sdf.format(cal.getTime()));
}

出力:

1333145915825
Friday, 30 March 2012 23:18:35 o'clock BST

に a を追加すると、次のTimeZoneようになりDateFormatます。

final DateFormat sdf = SimpleDateFormat.getDateTimeInstance(SimpleDateFormat.FULL, SimpleDateFormat.FULL);
sdf.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
System.out.println(sdf.format(cal.getTime()));

私は得る:

1333145887761
Saturday, 31 March 2012 00:18:07 o'clock CEST

したがって、はフォーマットするときにSimpleDateFormatデフォルトを使用し、を呼び出すときは使用しませんTimeZoneTimeZoneCalendarCalendar.getTime()

于 2013-07-30T11:00:30.937 に答える
0
    int year = 2012;
    int month = 2; // eg. for march
    int day = 31;
    int hrs = 0;
    int min = 18;


    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Berlin")); // GMT+1
    cal.set(year, month, day, hrs, min);
    long unixtime = cal.getTimeInMillis();

    cal.setTimeInMillis(unixtime);

    //Lets print it!
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
    sdf.setTimeZone(TimeZone.getTimeZone("Europe/Berlin"));
    System.out.println(sdf.format(cal.getTime()));

私の場合、上記のコードは次のように表示されます:03/31/2012 00:18:56

日付はどのように印刷しますか?

于 2013-07-30T10:55:47.623 に答える
0
int year = 2012;
        int month = 2; // eg. for march
        int day = 31;
        int hrs = 0;
        int min = 18;

        Calendar cal = Calendar.getInstance(TimeZone
                .getTimeZone("Europe/Berlin")); 
        cal.set(year, month, day, hrs, min);
        long unixtime = cal.getTimeInMillis() / 1000;
        cal.setTimeInMillis(unixtime * 1000);
        System.out.println(cal.getTime());

出力:

土 3 月 31 日 03:48:10 IST 2012

于 2013-07-30T11:01:04.577 に答える
0

問題は、2012 年 3 月 30 日 00:18 を取得する方法です。カレンダーの DATE フィールドは問題ありません。これを試してください

    Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Europe/Berlin")); // GMT+1
    cal.set(year, month, day, hrs, min);
    long unixtime = cal.getTimeInMillis() / 1000;
    cal.setTimeInMillis(unixtime * 1000);
    System.out.println(cal.get(Calendar.DATE));

出力

31
于 2013-07-30T10:58:52.203 に答える