我有一个字符串"2014-06-30 15:27",如果它是今天的日期,应该返回"15:27",否则返回"30/06/2014"。我已经尝试使用simpleDateFormat.parse,但它并没有很好地工作。
holder.data.setText(mensagem.getDate());
我有一个字符串"2014-06-30 15:27",如果它是今天的日期,应该返回"15:27",否则返回"30/06/2014"。我已经尝试使用simpleDateFormat.parse,但它并没有很好地工作。
holder.data.setText(mensagem.getDate());
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(...)
方法,你需要使用compareTo(...)
,这也可以让你一次性进行比较),2)时间戳具有小数秒。 - Clockwork-Musejava.util.Date
、java.util.Calendar
和java.text.SimpleDateFormat
这样的旧日期时间类现在已经成为遗留系统,被内置于Java 8及更高版本中的java.time类所取代。请参阅Oracle的教程。 - Basil BourqueLocalDateTime
首先将字符串解析为LocalDateTime
。将中间的空格替换为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();
时区对于确定日期非常重要。对于任何给定的时刻,日期因时区而异。例如,在法国巴黎的午夜过后几分钟是新的一天,而在加拿大魁北克省蒙特利尔仍然是“昨天”。
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及更高版本内置的。这些类取代了老旧的遗留日期时间类,如java.util.Date
、Calendar
和SimpleDateFormat
。
Joda-Time 项目现在处于维护模式,建议迁移到 java.time 类。
想要了解更多,请查看 Oracle 教程。并在 Stack Overflow 上搜索许多示例和解释。规范是 JSR 310。
您可以直接与数据库交换 java.time 对象。使用符合 JDBC 4.2 或更高版本的 JDBC 驱动程序。无需字符串,无需 java.sql.*
类。
如何获取 java.time 类?
ThreeTen-Extra 项目通过添加额外的类扩展了 java.time。该项目是 java.time 可能未来新增内容的试验场。您可能会在这里找到一些有用的类,例如 Interval
, YearWeek
, YearQuarter
和更多。
由于java.time
库是使用日期和时间的推荐方式。因此,要将当前日期与字符串日期进行比较,您需要首先将字符串格式的日期转换为java.time.LocalDate
:
LocalDate paresedStringDate = LocalDate.parse("2022-11-10");
之后,您可以使用以下代码获取当前日期:
LocalDate currentDate = LocalDate.now();
然后您可以使用以下代码比较当前日期和解析的字符串日期,以检查两者是否相同:
if (paresedStringDate.compareTo(currentDate) == 0) {
//do what you want to do here
}
paresedStringDate.isEqual(currentDate)
。 - Ole V.V.只需使用日期类...
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;
}