可以将日期转换为长整型,但长整型太大怎么办?

3

我现在非常困惑。

我有一个GregorianCalendar对象,我给了它一个特定的日期(2010年1月1日)。

日历:

Calendar c = new GregorianCalendar();
c.set(2010, 0, 1);
System.out.println(c.getTime());
System.out.println(c.getTimeInMillis());

输出:

2010年1月1日13:12:57 CET

1262347977927

现在,当我尝试创建一个long类型的变量并将这个数字存储在其中时,这个数字实际上对于我的变量来说太大了。

存储在变量中:

long timeStamp = 1262347977927;
// ERROR: The literal 1262347977927 of type int is out of range

但是当我直接将结果存储到变量中时,它正常运行。
直接存储:
long timeStamp = c.getTimeInMillis();
System.out.println(timeStamp);

输出:

1262348451631

为什么我得到的长整型数值过大而无法表示成长整型,却又不至于太大以至于无法表示成长整型?我很困惑。

我正在使用Java 6和Eclipse Indigo。如有需要,希望知道。

编辑:感谢所有即时回答……现在我感到非常愚蠢: p


3
不要觉得自己很蠢!问问自己为什么那些答案会像从迷你加特林中射出一样迅速:每个程序员在某个时候都必须面对这个问题 :D - Marvin Emil Brach
8个回答

7
你只需要在字面量后面添加一个L
long timeStamp = 1262347977927L;

6

请始终参考文档:基本数据类型

如果整数字面量以字母Ll结尾,则其类型为long;否则其类型为int。建议使用大写字母L,因为小写字母l与数字1难以区分。


5
您需要添加一个 Ll
long timeStamp = 1262347977927L;

如果没有赋值,编译器会默认为整数值,因此文本最好赋上确切的值。

否则它看起来就像一个1


5

在数字的末尾使用L:

long timeStamp = 1262347977927L;

它将Number定义为Long类型。


4

不,1262347977927对于一个长数字(8个字节)来说并不够大。

应该这样写:

long timeStamp = 1262347977927L;

长整型声明中的 L。

原因是在 Java 中,默认情况下所有数字都被视为 int 类型,除非你在末尾加上像 L 这样的开关。

简单来说:

long timeStamp = c.getTimeInMillis()

4

变更

long timeStamp = 1262347977927;

to

long timeStamp = 1262347977927L;

请注意,您需要在结尾处添加“L”(首选)或“l”(添加后可能导致难以阅读的代码;与此相关的有一个Java谜题条目),保留HTML标记。

4
它并不是告诉你 1262347977927 不能适合 long 类型,而是在尝试将其赋值给 long 变量之前,它无法构建一个值为 1262347977927 的 int 常量。请注意错误中从未提到 timeStamp:

类型为 int 的字面值 1262347977927 超出范围

在数字后面加上 L 标记它为 long 常量,然后您就可以毫无问题地进行赋值:
long timeStamp = 1262347977927L;

2
尝试在将数字分配给长变量时,在数字后添加“L”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接