如何在android和java中比较当前日期和所选日期
我使用下面的代码获取当前日期如何在android和java中比较当前日期和所选日期,android,Android,我使用下面的代码获取当前日期 long millis=System.currentTimeMillis(); java.sql.Date date=new java.sql.Date(millis); 我正在使用 CalendarView cal.setOnDateChangeListener(new OnDateChangeListener() { @Override public void onSelectedDayChange(Calend
long millis=System.currentTimeMillis();
java.sql.Date date=new java.sql.Date(millis);
我正在使用
CalendarView cal.setOnDateChangeListener(new OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth)
String s = +year + " : " + (month + 1) + " : " +dayOfMonth ;
并在下一个活动中作为--
我想在这里检查用户是否从当前日期选择了上一个日期
然后给出一条消息,不要继续下一个活动。使用SimpleDateFormat: 如果您的日期为2014年12月31日
String my_date = "31/12/2014"
然后需要将其转换为SimpleDataFormat
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(my_date);
if (new Date().after(strDate)) {
your_date_is_outdated = true;
}
else{
your_date_is_outdated = false;
}
或
使用下面的代码
CalendarView cal.setOnDateChangeListener(new OnDateChangeListener() {
@Override
public void onSelectedDayChange(CalendarView view, int year, int month, int dayOfMonth) {
String s = (month + 1) + "-" + dayOfMonth + "-" + year;
SimpleDateFormat sdf = new SimpleDateFormat("MM-dd-yyyy");
Date dateSource = null;
Calendar cal = Calendar.getInstance();
Date sysDate = cal.getTime();
try {
dateSource = sdf.parse(s);
if(dateSource.compareTo(sysDate)>0){
Toast.makeToast("Selected worng date",Toast.SHOW_LONG).show();
}else{
Intent in = new Intent(MainActivity.this, sec.class);
in.putExtra("TextBox", s.toString());
startActivity(in);
}
}
catch (ParseException e) {
Loger.log("Parse Exception " + e);
e.printStackTrace();
}
}
}
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
Date strDate = sdf.parse(my_date);
if (new Date().after(strDate)) {
your_date_is_outdated = true;
}
else{
your_date_is_outdated = false;
}
试试这几行代码,这可能会有所帮助。干杯
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
Date date = sdf.parse(enteredDate);
if (System.currentTimeMillis() > date.getTime()) {
//Entered date is backdated from current date
} else {
//Entered date is updated from current date
}
} catch (ParseException e) {
e.printStackTrace();
}
我提供的是现代的答案 java.time和ThreeTenABP 使用java.time中的
LocalDate
,这是现代java日期和时间API
以获取当前日期
LocalDate currentDate = LocalDate.now(ZoneId.systemDefault());
System.out.println(currentDate);
刚才我运行这段代码时,输出是:
2020-01-05
在日期选择器中获取所选日期
int year = 2019;
int month = Calendar.DECEMBER; // but don’t use `Calendar`
int dayOfMonth = 30;
LocalDate selectedDate = LocalDate.of(year, month + 1, dayOfMonth);
System.out.println(selectedDate);
2019-12-30
你的日期选择器使用的是与设计拙劣、过时已久的日历类使用的疯狂月份编号相同的编号。仅出于这个原因,为了产生可读代码,我使用该类中的一个常量来初始化month
。在日期选择器中,您将获得给定的号码,因此您没有理由使用日历
。所以不要
出于同样的原因,正如在您自己的代码中一样,我将1添加到month
,以获得正确的月数(例如,12月份为12)
日期是过去的吗?
if (selectedDate.isBefore(currentDate)) {
System.out.println("" + selectedDate + " is in the past; not going to next activity");
} else {
System.out.println("" + selectedDate + " is OK; going to next activity");
}
2019-12-30已经过去;不参加下一个活动
转换为字符串并返回
如果您需要将所选日期转换为字符串,以便通过Intent
(我不知道这是否是一项要求),请使用LocalDate
的toString
和parse
方法:
String dateAsString = selectedDate.toString();
LocalDate recreatedLocalDate = LocalDate.parse(dateAsString);
System.out.println(recreatedLocalDate);
2019-12-30
问:java.time不需要Android API级别26吗?
time在较旧和较新的Android设备上都能很好地工作。它至少需要Java6
- 在Java8和更高版本以及更新的Android设备上(API级别26),现代API是内置的
- 在非androidjava6和7中,获取三个后端口,即现代类的后端口(三个十用于jsr310;请参见底部的链接)
- 在(较旧的)Android上使用Android版本的ThreeTen Backport。它叫ThreeTenABP。并确保从带有子包的
org.threeten.bp
导入日期和时间类
链接
- 解释如何使用java.time
- ,其中首先描述了
java.time
- ,java.time的后端口
到Java6和Java7(JSR-310为三十)
什么是异常,则上述代码将工作或引发异常。若不是两者都有,那个么问题在于你们的日历控件或者其他一些东西。我在答案中添加了更多的细节。这就是我现在能帮上忙的,你的答案基本上是这样的,但是如果用try-catch-blockClose,我发现这是一种更方便的方法。我只是分享了我的代码块。
String dateAsString = selectedDate.toString();
LocalDate recreatedLocalDate = LocalDate.parse(dateAsString);
System.out.println(recreatedLocalDate);