44

現在の日付を整数値に変換したい。デフォルトでは、longを返します。longをintegerに変換しようとした後、整数値をdateに変換すると、1970年代の日付が表示されます。

 int i = (int) new Date().getTime();
 System.out.println("Integer : " + i);
 System.out.println("Long : "+ new Date().getTime());
 System.out.println("Long date : " + new Date(new Date().getTime()));
 System.out.println("Int Date : " + new Date(i));

次のような出力:

Integer : 1292838124
Long : 1345617601771
Long date : Wed Aug 22 12:10:01 IST 2012
Int Date : Fri Jan 16 04:37:18 IST 1970

現在の日付を整数(10桁の数字)に変換する方法を教えてください。

4

12 に答える 12

70

問題は、整数が現在の日付を格納するのに十分な大きさではないことです。Longを使用する必要があります。

日付は、1970年1月1日からのミリ秒数として内部に保存されます。

最大整数値は2147483648ですが、1970年以降のミリ秒数は現在1345618537869のオーダーです。

最大整数値を日付に入れると、1970年1月26日月曜日になります。

編集:以下のコメントに従って、1000による除算を表示するコード:

    int i = (int) (new Date().getTime()/1000);
    System.out.println("Integer : " + i);
    System.out.println("Long : "+ new Date().getTime());
    System.out.println("Long date : " + new Date(new Date().getTime()));
    System.out.println("Int Date : " + new Date(((long)i)*1000L));

Integer : 1345619256
Long : 1345619256308
Long date : Wed Aug 22 16:37:36 CST 2012
Int Date : Wed Aug 22 16:37:36 CST 2012
于 2012-08-22T06:56:57.867 に答える
11

現在の日付を整数(10桁の数値)として取得するには、new Date()。getTime()から返されたlongを1000で割る必要があります。

これはint範囲にあり、2038年1月18日まで有効です。

于 2012-08-22T07:13:13.733 に答える
6

1970年1月1日からの経過日数を表す整数のみが必要な場合は、次のことを試すことができます。

// magic number=
// millisec * sec * min * hours
// 1000 * 60 * 60 * 24 = 86400000
public static final long MAGIC=86400000L;

public int DateToDays (Date date){
    //  convert a date to an integer and back again
    long currentTime=date.getTime();
    currentTime=currentTime/MAGIC;
    return (int) currentTime; 
}

public Date DaysToDate(int days) {
    //  convert integer back again to a date
    long currentTime=(long) days*MAGIC;
    return new Date(currentTime);
}

短くても読みにくい(少し速い?):

public static final long MAGIC=86400000L;

public int DateToDays (Date date){
    return (int) (date.getTime()/MAGIC);
}

public Date DaysToDate(int days) {
    return new Date((long) days*MAGIC);
}

お役に立てれば。

編集:これは7月11日金曜日01:00:00CET5881580まで機能する可能性があります

于 2014-07-10T18:38:13.880 に答える
6
于 2016-08-12T23:02:27.030 に答える
4

このようなものが必要ですか(時間なし)?

public static Integer toJulianDate(Date pDate) {
if (pDate == null) {
  return null;
}
Calendar lCal = Calendar.getInstance();
lCal.setTime(pDate);
int lYear = lCal.get(Calendar.YEAR);
int lMonth = lCal.get(Calendar.MONTH) + 1;
int lDay = lCal.get(Calendar.DATE);
int a = (14 - lMonth) / 12;
int y = lYear + 4800 - a;
int m = lMonth + 12 * a - 3;
return lDay + (153 * m + 2) / 5 + 365 * y + y / 4 - y / 100 + y / 400 - 32045;
}
于 2012-08-22T07:00:24.177 に答える
2

以下に示すように、これを解決しました。

    long year = calendar.get(Calendar.YEAR);
    long month = calendar.get(Calendar.MONTH) + 1;
    long day = calendar.get(Calendar.DAY_OF_MONTH);
    long calcDate = year * 100 + month;
    calcDate = calcDate * 100 + day;
    System.out.println("int: " + calcDate);
于 2015-02-20T20:40:00.403 に答える
1

これを試して

Calendar currentDay= Calendar.getInstance();
int currDate= currentDay.get(Calendar.DATE);
int currMonth= currentDay.get(Calendar.MONTH);
int currYear= currentDay.get(Calendar.YEAR);
System.out.println(currDate + "-" +  currMonth + "-" + currYear);

LocalDateを使用する別の方法。

LocalDate today = LocalDate.now();
int currentDate= today.getDayOfMonth();
int currentMonth= today.getMonthValue();
int currentYear= today.getYear()
于 2018-08-30T10:06:30.357 に答える
0

問題はgetTime()が原因です。常に以下を返します。

このDateオブジェクトによって表される1970年1月1日00:00:00GMTからのミリ秒数を返します。

最大整数値が戻り値よりも小さいため、getTime()なぜ間違った結果を示しているのですか。

于 2012-08-22T06:58:33.247 に答える
0

私のJava7では、出力が異なります。

Integer : 1293732698
Long : 1345618496346
Long date : Wed Aug 22 10:54:56 MSK 2012
Int Date : Fri Jan 16 02:22:12 MSK 1970

これは予想される動作です。

Sun Apr 26 20:46:39 MSK 1970可能な最新の日付は次のとおりであるため、現在の日付をミリ秒単位で整数(10桁の数値)として表示することはできません。

Date d = new Date(9999_9999_99L);
System.out.println("Date: " + d);

Date: Sun Apr 26 20:46:39 MSK 1970

秒/分で表示することを検討することをお勧めします。

于 2012-08-22T07:01:18.390 に答える
0

おそらくできません。LongはIntegerよりも高いデータ型です。

またはこのリンクはあなたを助けるかもしれません

http://www.velocityreviews.com/forums/t142373-convert-date-to-integer-and-back.html

于 2012-08-22T07:08:36.840 に答える
-1

単純に、プログラムのデフォルトの開始日を表すlong変数を実際に作成します。別のlong変数の日付を取得します。次に、長い開始日を差し引き、整数に変換します。出来上がり読み取りと変換を元に戻すには、減算ではなく加算するだけです。明らかに、これは必要な日付範囲の大きさに依存します。

于 2014-11-23T21:47:51.257 に答える
-1

JavaDateからint変換:

public static final String DATE_FORMAT_INT = "yyyyMMdd";

public static String format(Date date, String format) {
    return isNull(date) ?  
    null : new SimpleDateFormat(format).format(date);
}

public static Integer getDateInt(Date date) {
    if (isNull(date)) {
        throw new IllegalArgumentException("Date must not be NULL");
    }

    return parseInt(format(date, DATE_FORMAT_INT));
}
于 2019-01-15T06:23:58.443 に答える