可以将日期转换为long但long太大了?

时间:2013-07-04 11:23:30

标签: java eclipse

我现在很困惑。

我有一个GregorianCalendar对象,我给出了具体日期(2010年1月1日)。

日历:

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

输出:

  

Fri Jan 01 13:12:57 CET 2010

     

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

8 个答案:

答案 0 :(得分:7)

您只需在文字后添加 L

long timeStamp = 1262347977927L;

答案 1 :(得分:6)

始终参考文档Primitive Data Types

  

如果整数字面以 L l 字母结尾,则其类型为;   否则它的类型为 int 。建议您使用鞋面   大小写 L ,因为小写字母 l 很难区分   来自数字 1

答案 2 :(得分:5)

您必须附加Ll

long timeStamp = 1262347977927L;

为指定值的字面值,否则编译器会假定整数值

前者是优选的,因为后者看起来像1

答案 3 :(得分:5)

在数字末尾使用L:

long timeStamp = 1262347977927L;

它将Number定义为Long。

答案 4 :(得分:4)

没有1262347977927对于长数字(8字节)来说不够大。

像这样:

long timeStamp = 1262347977927L;

L for long declaration。

原因是,在Java中,默认情况下,所有数字都被视为int类型,除非您最后放置L之类的开关。

或简单:

long timeStamp = c.getTimeInMillis()

答案 5 :(得分:4)

更改

long timeStamp = 1262347977927;

long timeStamp = 1262347977927L;

请注意,您需要后缀为“L”(首选)或“l”(后缀可能导致难以阅读的代码;最后会有一个与此相关的java puzzler条目)。

答案 6 :(得分:4)

它没有告诉你1262347977927不能适应长,它告诉你它甚至不能构造一个值为1262347977927的int常量,直到它甚至试图将它分配给long变量。请注意错误中从未提及timeStamp:

  

int类型的文字1262347977927超出范围

在数字后面使用L将其标记为长常数,然后您可以毫无问题地分配它:

long timeStamp = 1262347977927L;

答案 7 :(得分:2)

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