我从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