我正在构建一个简单的管理器应用程序,并尝试选择一个类来保持我的日期和时间在对象中。我应该使用哪些课程?我已经看到Date
类中的许多方法都被弃用了。也许Calendar
呢?推荐一下。感谢。
答案 0 :(得分:2)
https://docs.oracle.com/javase/8/docs/api/java/time/LocalDateTime.html
如果您正在寻找没有时区的相当标准的格式:" ISO-8601日历系统中没有时区的日期时间,例如2007-12-03T10:15:30&#34 ;
答案 1 :(得分:2)
这取决于您想要的日期/时间。
System.currentTimeMillis()
- 这将为您提供一个简单的数值,表示为UNIX纪元之后作为 long 的毫秒数。如果您想要年月日格式,可以使用以下格式之一:
new Date()
- 这将为您提供一个使用当前日期/时间初始化的Date对象。由于API方法存在很大缺陷,因此不推荐使用。
new org.joda.time.DateTime()
- 这会给你一个joda-time对象
用当前日期/时间初始化。 Joda-time包含一个很好的API,用于执行涉及时间点和持续时间计算的任何事情。但是,对于Java 8,这不再是真的
Calendar.getInstance()
- 这会使用默认语言环境和TimeZone为您提供使用当前日期/时间初始化的Calendar对象。
如果您只需要一种简单的方法来输出格式为YYYY.MM.DD-HH.MM.SS的时间戳 - 这是一个非常常见的情况 - 那么请使用:
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(Calendar.getInstance().getTime());
即时 - 如果您想对业务逻辑和数据存储/交换进行任何工作,则应以UTC格式进行,这是最佳做法。要以纳秒为单位获取当前时刻,请使用Instant类:
Instant instant = Instant.now();
您还可以将Instant调整为其他时区。应用ZoneId对象以获取ZonedDateTime。
ZoneId zid = ZoneId.of("Europe/Paris"); //create zone id
ZonedDateTime zdt = instant.atZone(zid); //pass zone id get the adjusted zoned date time.
LocalDate
- 此类表示没有时间且没有时区的仅限日期的值。
ZoneId zid = ZoneId.of("Europe/Paris");
LocalDate today = LocalDate.now(zid); //Always pass in a time zone