【发布时间】:2014-09-09 02:39:18
【问题描述】:
所以我有一个字符串“2014-06-30 15:27”,如果它是今天的日期,它应该只返回“15:27”,否则返回“30/06/2014”。我已经尝试过 simpleDateFormat.parse 但效果不佳。
holder.data.setText(mensagem.getDate());
【问题讨论】:
标签: java android date datetime compare
所以我有一个字符串“2014-06-30 15:27”,如果它是今天的日期,它应该只返回“15:27”,否则返回“30/06/2014”。我已经尝试过 simpleDateFormat.parse 但效果不佳。
holder.data.setText(mensagem.getDate());
【问题讨论】:
标签: java android date datetime compare
final String stringDate = "2014-07-17 23:59";
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
Date date = inputFormat.parse(stringDate);
Calendar calendarDate = Calendar.getInstance();
calendarDate.setTime(date);
Calendar midnight = Calendar.getInstance();
midnight.set(Calendar.HOUR_OF_DAY, 0);
midnight.set(Calendar.MINUTE, 0);
midnight.set(Calendar.SECOND, 0);
midnight.set(Calendar.MILLISECOND, 0);
if (calendarDate.compareTo(midnight) >= 0)
{
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
System.out.println(timeFormat.format(date));
}
else
{
SimpleDateFormat dateTimeForm = new SimpleDateFormat("dd/MM/yyyy HH:mm");
System.out.println(dateTimeForm.format(date));
}
【讨论】:
.equals(...) 方法,因为它考虑到时区等问题,您需要 @987654328 @ ,这也可以让您一次性进行比较),2)时间戳具有小数秒。
java.util.Date、java.util.Calendar 和 java.text.SimpleDateFormat 现在是 legacy,被 Java 8 中内置的 java.time 类所取代,之后。见Tutorial by Oracle。
LocalDateTime首先将字符串解析为LocalDateTime。将中间的 SPACE 替换为 T 以符合标准 ISO 8601 格式。 java.time 类默认支持 ISO 8601 格式。
LocalDateTime ldt = LocalDateTime.parse ( "2014-06-30 15:27".replace ( " " , "T" ) );
ldt.toString(): 2014-06-30T15:27
这样的值没有真正的意义。输入字符串缺少关于从 UTC 偏移或时区的任何线索。所以我们不知道这是新西兰奥克兰的下午 3 点还是加拿大魁北克的下午 3 点,这是两个截然不同的时刻。您应该根据您的业务情况分配偏移量或时区。搜索 Stack Overflow 以了解如何执行此操作,重点关注 OffsetDateTime 和 ZonedDateTime 类。我暂时跳过这个关键问题。
LocalDate提取仅日期值。 LocalDate 类表示没有时间和时区的仅日期值。
LocalDate ld = ldt.toLocalDate();
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因区域而异。例如,Paris France 中午夜后几分钟是新的一天,而 Montréal Québec 中仍然是“昨天”。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
您可以通过调用compareTo、equals、isEqual、isBefore、isAfter等方法来比较LocalDate对象。
if( today.isEqual( ld ) ) {
return ldt.toLocalTime();
} else {
return ld;
}
java.time 框架内置于 Java 8 及更高版本中。这些类取代了麻烦的旧 legacy 日期时间类,例如 java.util.Date、Calendar 和 SimpleDateFormat。
Joda-Time 项目现在位于maintenance mode,建议迁移到java.time 类。
要了解更多信息,请参阅Oracle Tutorial。并在 Stack Overflow 上搜索许多示例和解释。规格为JSR 310。
您可以直接与您的数据库交换 java.time 对象。使用符合JDBC 4.2 或更高版本的JDBC driver。不需要字符串,不需要java.sql.* 类。
从哪里获得 java.time 类?
ThreeTen-Extra 项目通过附加类扩展了 java.time。该项目是未来可能添加到 java.time 的试验场。您可以在这里找到一些有用的类,例如Interval、YearWeek、YearQuarter 和more。
【讨论】:
只需使用 Date 类...
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date exitdate = df.parse("2019-01-17");
Date currdate = new Date();
long diff = currdate.getTime() - exitdate.getTime();
long days = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
if(days==0)
{
System.out.println("IS TRUE"+currdate.toString());
return true;
}
【讨论】: