【问题标题】:How to construct a Date from a String [duplicate]如何从字符串构造日期 [重复]
【发布时间】:2011-08-18 17:56:34
【问题描述】:

我必须比较 if/else 中的两个日期,即当前日期和预定义日期(比如 2011 年 1 月 1 日)。这应该很简单,但我找不到设置预定义日期的方法,例如:

Java.util.Date date = new Date("2011-01-01");

如何比较两个日期?我真的不知道为什么做起来这么复杂。

【问题讨论】:

  • @Jonathon:我不这么认为。这里的OP想知道如何构造预定义的日期。
  • 同意,我太仓促了。如果可以的话,我会撤回并简单地链接到它,因为它仍然有用且相关。
  • Date 对象具有 after(...)before(...) 方法。只需创建new Date() 即可获取当前日期。要从 String 中获取日期,请使用 SimpleDateFormat。否则使用 Matt Ball 提到的日历方法。
  • 现代方法:java.time.LocalDate.parse( "2011-01-01" ).isBefore( LocalDate.now() )

标签: java android datetime date


【解决方案1】:

试试:

import java.text.SimpleDateFormat;
import java.util.Date;

...

Date today = new Date();
Date predefined = new SimpleDateFormat("yyyy-MM-dd").parse("2011-01-01");

if(today.equals(predefined)) {
    ...
}

【讨论】:

【解决方案2】:

使用java.util.Calendar

Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, 2011);
cal.set(Calendar.MONTH, 1);
cal.set(Calendar.DATE, 1);
Date predefined = cal.getTime();

Date now = new Date();

if (now.after(predefined))
{
    // do something
}
else
{
    // do something else
}

或使用JodaTime

如何比较两个日期?我真的不知道为什么做起来这么复杂。

因为日历/日期/时间真的很难正确设置,而 Date(部分是 Calendar)的 Java 实现完全是火车残骸。

【讨论】:

  • 非常感谢您如此详细的回复。我从中吸取了教训。但是,我自己也想过通过Calendar 对象来实现,但我觉得通过SimpleDateFormat 对象来实现要简单得多。我已经在我的代码中尝试过使用相同的对象,但我没有使用parse() 方法。我会在您的回复中添加加号,但我会将上面的标记为答案。
  • @askmo:没问题。仅供参考,DateFormat 的另一个不错的选择是使用静态工厂方法,例如 DateFormat.getDateInstance(DateFormat.SHORT).format(...)
  • 谢谢。我知道这种方法,但我的问题是因为我没有使用parse() 方法。
  • @askmo:是的,我很抱歉——我的意思是DateFormat.getDateInstance(DateFormat.SHORT).parse(...)而不是...format(...)
【解决方案3】:

【讨论】:

  • 这并不能解决与预定义日期的比较
猜你喜欢
  • 2013-09-17
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 1970-01-01
  • 2015-06-28
  • 2014-03-23
相关资源
最近更新 更多