2

我正在开发一个项目,我在其中创建了 2 个变量startdateenddate类型Date为 java。
如您所知,Java 中的 Date 包括日期和时间。
但是在查询时,我只需要 startdate 变量的日期(特别是天)部分。
我试过startdate.getday()了,但它说它已被弃用,我应该改用它Calendar.get(Calendar.DAY_OF_MONTH)
但我不知道如何使用它,尝试到处搜索,解决方案是获取当前日期。

如果 startdate 包含 (30/01/1988 02:30:54) 我想做一些事情,以便我在字符串/整数变量中分别获得 30/01/1988 或者如果可能的话 30 和 01 和 1988 。

4

2 回答 2

4
 Calendar cal = Calendar.getInstance();
 cal.setTime(startdate);
 cal.get(Calendar.DAY_OF_MONTH);
于 2012-10-15T13:55:29.100 回答
1

该类java.util.Date是旧的数据时间类的一部分,这些类设计不良、混乱且麻烦。避开他们。

而是使用 java.time 类。

java.time

java.time框架内置于 Java 8 及更高版本中这些类取代了旧的麻烦的日期时间类,例如java.util.Date, .Calendar, & java.text.SimpleDateFormatJoda-Time团队还建议迁移到 java.time 。

要了解更多信息,请参阅Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。

许多 java.time 功能在 ThreeTen-Backport 中向后移植到 Java 6 和 7,并在ThreeTenABP进一步适应 Android 。

Instant

第一步是跳出旧课程,进入新课程。对于转换,新方法已添加到旧类中。该java.util.Date课程现在提供toInstant. AnInstant是 UTC 时间线上的一个时刻,分辨率可以达到纳秒。

Instant instant = myUtilDate.toInstant();

时区

确定日期需要时区。对于任何给定的时刻,日期都会因时区而在全球范围内变化。巴黎的午夜过后几分钟,在蒙特利尔仍然是“昨天”。

该类ZoneId代表一个时区。请注意,我们从不使用主流媒体中常见的 3-4 个字母缩写,例如ESTor IST。这些不是真正的时区,不是标准化的,甚至不是唯一的(!)。而是使用tz 数据库中以 format 定义的适当时区continent/region

ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = instant.atZone( zoneId );

询问ZonedDateTime您需要的零件。

int year = zdt.getYear();
int month = zdt.getMonthValue(); // Or handy Month enum…  zdt.getMonth();
int dayOfMonth = zdt.getDayOfMonth();

LocalDate

如果您正在做大量工作,而您肯定想忽略一天中的时间和时区,请使用该LocalDate课程。

LocalDate localDate = zdt.toLocalDate();
于 2016-07-21T05:32:07.840 回答