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