44

我想将当前日期转换为整数值。默认情况下,它返回 long。当我尝试将 long 转换为整数,然后我将整数值转换为日期时,意味着它显示 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

问题是 Integer 不足以存储当前日期,您需要使用 Long。

日期在内部存储为自 1970 年 1 月 1 日以来的毫秒数。

最大 Integer 值为 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);
}

希望这可以帮助。

编辑:这可以工作到 Fri Jul 11​​ 01:00:00 CET 5881580

于 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()。它总是返回以下。

返回自 1970 年 1 月 1 日 00:00:00 GMT 以来此 Date 对象表示的毫秒数。

因为最大整数值小于返回值getTime(),所以为什么显示错误结果。

于 2012-08-22T06:58:33.247 回答
0

在我的 Java 7 上,输出不同:

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

这是预期的行为。

不可能将当前日期以毫秒为单位显示为整数(10 位数字),因为最新的可能日期是Sun Apr 26 20:46:39 MSK 1970

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

很简单,真正创建一个代表程序默认开始日期的长变量 将日期获取到另一个长变量。然后减去长开始日期并转换为整数瞧,要读取并转换回来,只需加法而不是减法。显然,这取决于您需要多大的日期范围。

于 2014-11-23T21:47:51.257 回答
-1

JavaDateint转换:

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 回答