日期构造函数中出现超出范围的编译时错误



我从API调用得到的日期值为1598331600000

我正在尝试使用SimpleDateFormat 将其转换为可读格式

但我在日期构造函数中出现了超出范围的编译时间错误

这是我的程序

public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
Calendar cal = Calendar.getInstance();
Date date = new java.sql.Date(1598331600000);
SimpleDateFormat sdf = new java.text.SimpleDateFormat("MMddyyyy");
String formattedDate = sdf.format(date);
System.out.println(formattedDate);
}
}

你能告诉我如何解决这个错误吗。

没有后缀的1598331600000被视为int,这个值对它来说太大了(int可以容纳大约20亿的值,2^31 - 1(。long类型使用L后缀,最多可容纳2^63 - 1:1598331600000L的值。

我建议使用java-8日期-时间api,并停止使用遗留的日历,SimpleDateFormat

Instant.ofEpochMilli(1598331600000l)
.atZone(ZoneId.systemDefault())
.format(DateTimeFormatter.ofPattern("MMddyyyy")) //08252020

此处的值被视为整数。

Date date = new java.sql.Date(1598331600000);

构造函数可以采用Long值。像这样:

long millis=System.currentTimeMillis();
Date date = new java.sql.Date(millis);

因此,它抛出了错误。

试试这个代码:

import java.util.*;
import java.text.SimpleDateFormat;

public class Main{
public static void main(String[] args) {

Calendar cal = Calendar.getInstance();
/*long millis=System.currentTimeMillis();  <---- This also works
Date date = new java.sql.Date(millis);*/
Date date = new java.sql.Date(1598331600000L);  // <---Look the L for Long here
SimpleDateFormat sdf = new java.text.SimpleDateFormat("MMddyyyy");
String formattedDate = sdf.format(date);
System.out.println(formattedDate);
}
}

输出:

08252020

最新更新