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

Java 可以将日期转换为long,但long太大?,java,eclipse,Java,Eclipse,我现在很困惑 我有一个GregoriaCalendar对象,我给它指定了一个具体日期(2010年1月1日) 日历: Calendar c = new GregorianCalendar(); c.set(2010, 0, 1); System.out.println(c.getTime()); System.out.println(c.getTimeInMillis()); long timeStamp = 1262347977927; // ERROR: The literal 126234

我现在很困惑

我有一个
GregoriaCalendar
对象,我给它指定了一个具体日期(2010年1月1日)

日历:

Calendar c = new GregorianCalendar();
c.set(2010, 0, 1);
System.out.println(c.getTime());
System.out.println(c.getTimeInMillis());
long timeStamp = 1262347977927;
// ERROR: The literal 1262347977927 of type int is out of range
long timeStamp = c.getTimeInMillis();
System.out.println(timeStamp);
输出:

Calendar c = new GregorianCalendar();
c.set(2010, 0, 1);
System.out.println(c.getTime());
System.out.println(c.getTimeInMillis());
long timeStamp = 1262347977927;
// ERROR: The literal 1262347977927 of type int is out of range
long timeStamp = c.getTimeInMillis();
System.out.println(timeStamp);
英国东部时间2010年1月1日星期五13:12:57

126234797927

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

存储在变量中:

Calendar c = new GregorianCalendar();
c.set(2010, 0, 1);
System.out.println(c.getTime());
System.out.println(c.getTimeInMillis());
long timeStamp = 1262347977927;
// ERROR: The literal 1262347977927 of type int is out of range
long timeStamp = c.getTimeInMillis();
System.out.println(timeStamp);
但是,当我将结果直接存储到变量中时,它工作得很好

直接存储:

Calendar c = new GregorianCalendar();
c.set(2010, 0, 1);
System.out.println(c.getTime());
System.out.println(c.getTimeInMillis());
long timeStamp = 1262347977927;
// ERROR: The literal 1262347977927 of type int is out of range
long timeStamp = c.getTimeInMillis();
System.out.println(timeStamp);
输出:

Calendar c = new GregorianCalendar();
c.set(2010, 0, 1);
System.out.println(c.getTime());
System.out.println(c.getTimeInMillis());
long timeStamp = 1262347977927;
// ERROR: The literal 1262347977927 of type int is out of range
long timeStamp = c.getTimeInMillis();
System.out.println(timeStamp);
1262348451631

为什么我长得太大而不能长,而不是太长而不能长?我很困惑

如果有人想知道的话,我正在使用Java6和EclipseIndigo


编辑:感谢您提供的所有即时答案。。。我现在觉得自己很愚蠢:p

你只需在文字后面加一个L

long timeStamp = 1262347977927L;

126234797927
对于一个长数字(即8字节)来说不够大

这样做:

long timeStamp = 1262347977927L;
长时间的声明

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

或者很简单:

long timeStamp = c.getTimeInMillis()

您必须附加
L
L

long timeStamp = 1262347977927L;
将文本设置为指定的值,否则编译器将假定为整数值

前者更可取,因为后者看起来像
1

变化

long timeStamp = 1262347977927;


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

使用数字末尾的L:

long timeStamp = 1262347977927L;

它将数字定义为Long。

它并不是告诉您126234797927不能放入Long变量,而是告诉您在它尝试将其赋值到Long变量之前,它不能构造一个值为126234797927的int常量。请注意,错误中从未提及时间戳:

int类型的文字126234797927超出范围

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

long timeStamp = 1262347977927L;

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

请始终参考文档:

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


别傻了!扪心自问,为什么这些答案像是从一把微型手枪中射出的:每个程序员都必须在时间到来之前面对这个问题:D