将当前日期转换为整数

我想将当前日期转换为整数forms。 默认情况下,它返回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位数字)

问题是Integer不足以存储当前日期,您需要使用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 

为了将当前日期作为整数(10位数字),您需要将从新Date()。getTime()返回的long除以1000。

这将在int范围内,并且一直持续到2038年1月18日。

你需要这样的东西(没有时间)吗?

 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; } 

如果您只需要一个表示自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:00 CET 5881580

我已经解决了这个问题,如下所示:

  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); 

TL;博士

 Instant.now().getEpochSecond() // The number of seconds from the Java epoch of 1970-01-01T00:00:00Z. 

细节

正如其他人所说的那样, 32位整数不能保持一个足够大的数字,从纪元(UTC的1970年初)到现在的秒数。 您需要64位整数( long基元或Long对象)。

java.time

其他答案使用旧的旧日期时间类。 它们已被java.time类取代。

Instant类表示UTC时间轴上的一个时刻,分辨率为纳秒 。

 Instant now = instant.now() ; 

您可以查询自纪元以来的毫秒数。 注意这意味着数据丢失,将纳秒缩短为毫秒。

 long millisecondsSinceEpoch = now.toEpochMilli() ; 

如果你想要一个自纪元以来纳秒的计数,你需要做一些数学运算,因为这个类奇怪地没有toEpochNano方法。 注意附加到十亿的L以将计算引发为64位长整数。

 long nanosecondsSinceEpoch = ( instant.getEpochSecond() * 1_000_000_000L ) + instant.getNano() ; 

自纪元以来的整秒

但问题的结尾要求一个10位数字。 我怀疑这意味着自1970-01-01T00:00:00纪元以来的秒数。 这通常称为Unix时间或Posix时间。

我们可以查询此号码的Instant 。 同样,这意味着数据丢失,截断该对象可能保持的任何秒数。

 long secondsSinceEpoch = now.getEpochSecond() ; // The number of seconds from the Java epoch of 1970-01-01T00:00:00Z. 

你的问题是因为getTime() 。 它总是返回以下。

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

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

在我的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 

您可能需要考虑以秒/分钟显示它。

可能你不能,Long是比Integer更高的数据类型。

或者此链接可能对您有所帮助

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

尝试这个

 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() 

简单实际创建一个长变量,表示程序的默认开始日期获取另一个长变量的日期。 然后扣除长开始日期并转换为整数瞧,要读取并转换回来只需添加而不是减去。 显然,这取决于您需要的日期范围有多大。