2013-07-04 60 views
3

我现在很困惑。可以将日期转换为长时间但长时间太长?

我有一个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靛蓝如果有人想知道。

编辑:感谢所有的即时的答案......我现在感觉非常愚蠢的:P

+3

不要觉得愚蠢!问自己为什么这些答案就像是从迷你枪中射出的那样:每个程序员都必须按时间去面对这个问题:D –

回答

7

你只需要文字后添加大号

long timeStamp = 1262347977927L; 
+1

好吧,现在我觉得自己像一个真正的笨蛋大声笑,谢谢 – JREN

+0

不客气! ;-) – Algiz

4

没有1262347977927对于很长的数字(这是8个字节)不够大。

让这样的:

long timeStamp = 1262347977927L; 

L用很长的声明。

原因是在Java中默认情况下,所有的数字int型,除非你把开关一样L最终处理。

或者简单:

long timeStamp = c.getTimeInMillis() 
5

您必须附加一个Ll

long timeStamp = 1262347977927L; 

字面所分配的值,否则整数值是由编译器假定

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

4

变化

long timeStamp = 1262347977927; 

long timeStamp = 1262347977927L; 

请注意,您需要后缀 'L'(首选)或 'L'(后面添加这可能导致难以阅读的代码;还有的AA java puzzler与此相关的条目)。

5

用户将L在号码的末尾:

long timeStamp = 1262347977927L; 

它定义了数量,只要。

4

它不会告诉你1262347977927不能适合长时间,它告诉你它不能构造一个int常量值1262347977927,甚至在它试图将它分配给long变量之前。请注意如何时间戳从来没有在错误中提到:

The literal 1262347977927 of type int is out of range

使用L的数目后,将其标记为一个长不变,那么你可以将它没有问题:

long timeStamp = 1262347977927L; 
2

试着在后面加上“L”在将数字分配给long变量之后,在您的数字之后。

6

请务必参阅文档,Primitive Data Types

An integer literal is of type long if it ends with the letter L or l; otherwise it is of type int. It is recommended that you use the upper case letter L because the lower case letter l is hard to distinguish from the digit 1.

+2

+1为真实来源 – NINCOMPOOP