很抱歉这个简单的问题,但我在论坛上进行了很多研究,上面没有一个帮助过我。我的数据库格式为“yyyy-mm-ddThh:mm:ssZ”的日期格式正好在我的数据库中。我只需要抓住年,月和日来与另一个字符串进行比较。 我得到的最接近的是它不起作用。
String dateArracoamento = arracoamento.getDate();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
SimpleDateFormat output = new SimpleDateFormat("yyyy-MM-dd");
Date d = sdf.parse(dateArracoamento);
String dateArracoamentoFormat = output.format(d);
例如:我的dateArracoamento = 2016-04-28T10:10:10Z。我只需要2016-04-28而不是完整的日期。我怎样才能做到这一点?
答案 0 :(得分:1)
您可以使用与格式化输出相同的格式化程序来解析该日期字符串。
String input = "2016-04-28T10:10:10Z";
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String output = dateFormat.format(dateFormat.parse(input));
答案 1 :(得分:0)
您没有提供太多信息,但是......
首先,确保d不为null并且您捕获任何解析异常,因此您的字符串格式日期已正确解析。然后,我建议您使用Calendar类来比较日期或按照您的意愿,获取年,月,日等...
检查此示例:
Date d = null;
try {
d = sdf.parse(dateArracoamento);
if (d != null) {
String dateArracoamentoFormat = output.format(d);
Calendar c = Calendar.getInstance();
c.setTime(d);
c.get(Calendar.YEAR);
c.get(Calendar.MONTH);
c.get(Calendar.DAY_OF_MONTH);
}
} catch (ParseException e) {
e.printStackTrace();
}
答案 2 :(得分:0)
其他答案已过时,使用旧的遗留类。
Java 8及更高版本中内置的java.time框架取代了麻烦的旧日期时间类。
您的输入字符串恰好采用标准ISO 8601格式。
在解析/生成日期时间值的String表示时,java.time类默认使用ISO 8601格式。因此无需指定格式化模式。
Instant
Instant
代表UTC中时间轴上的一个时刻,分辨率为nanoseconds。
Instant instant = Instant.parse( "2016-04-29T22:04:07Z" );
LocalDate
LocalDate
类仅代表日期,没有时间和没有时区。要实现此目的,请应用UTC(ZoneOffset
)偏移量来获取OffsetDateTime
个对象,或应用全时区域(ZoneId
)来获取ZonedDateTime
。
ZoneId zoneId = ZoneId.of( "America/Montreal" );
ZonedDateTime zdt = ZonedDateTime.ofInstant( instant , zoneId );
LocalDate ld = zdt.toLocalDate();
也许你真的打算继续使用UTC。使用常量ZoneOffset.UTC
。
OffsetDateTime odt = OffsetDateTime.ofInstant( instant , ZoneOffset.UTC );
LocalDate ld = odt.toLocalDate();