System.currentTimeMillis() vs. new Date() vs. Calendar.getInstance().getTime()

2022-08-31 05:31:18

在Java中,使用的性能和资源影响是什么

System.currentTimeMillis() 

断续器

new Date() 

断续器

Calendar.getInstance().getTime()

据我所知,这是最有效的。但是,在大多数应用程序中,需要将该长整型值转换为 Date 或某些类似的对象,才能执行对人类有意义的任何操作。System.currentTimeMillis()


答案 1

System.currentTimeMillis()显然是最有效的,因为它甚至不会创建一个对象,但实际上只是一个大约一个很长的薄包装器,所以它并不落后。另一方面,相对缓慢且非常复杂,因为它必须处理日期和时间(闰年,夏令时,时区等)固有的相当复杂和所有奇怪之处。new Date()Calendar

通常,最好只处理应用程序中的长时间戳或对象,并且仅在实际需要执行日期/时间计算或设置日期格式以向用户显示它们时使用。如果你必须做很多事情,使用Joda Time可能是一个好主意,因为界面更干净,性能更好。DateCalendar


答案 2

看看 JDK,最里面的构造函数有这个:Calendar.getInstance()

public GregorianCalendar(TimeZone zone, Locale aLocale) {
    super(zone, aLocale);
    gdate = (BaseCalendar.Date) gcal.newCalendarDate(zone);
    setTimeInMillis(System.currentTimeMillis());
}

所以它已经自动执行您的建议。Date 的默认构造函数包含以下内容:

public Date() {
    this(System.currentTimeMillis());
}

因此,确实不需要专门获取系统时间,除非您想在使用它创建日历/日期对象之前对其进行一些数学运算。此外,如果您的目的是大量使用日期计算,我确实必须建议使用joda-time作为Java自己的日历/日期类的替代品。


推荐