我使用下面的代码
获取当前日期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 ;
将其传递给下一个活动 -
Intent in = new Intent(MainActivity.this, sec.class);
in.putExtra("TextBox", s.toString());
startActivity(in);
如果用户从当前日期选择了上一个日期,我想在这里查看 然后发一条消息,不要继续下一个活动。
答案 0 :(得分:19)
使用SimpleDateFormat:
如果您的日期是 31/12/2014 格式。
String my_date = "31/12/2014"
然后您需要将其转换为 SimpleDateFormat
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("dd/MM/yyyy");
Date strDate = sdf.parse(my_date);
if (System.currentTimeMillis() > strDate.getTime()) {
your_date_is_outdated = true;
}
else{
your_date_is_outdated = false;
}
答案 1 :(得分:1)
我正在提供现代的答案。
使用现代Java日期和时间API java.time中的LocalDate
。
要使用当前日期
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
您的日期选择器正在使用与设计不良且过时的Calendar
类相同的疯狂月份编号。仅出于这个原因,为了产生可读的代码,我使用了该类中的常量来初始化month
。在日期选择器中,您将获得给您的号码,因此您没有理由使用Calendar
。所以不要。
出于同样的原因,就像在您自己的代码中一样,我在month
上加1以获取正确的月份数(例如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
(我不知道这是否是必需条件),请使用toString
和{{1 }}种parse
方法:
LocalDate
2019-12-30
java.time在较新和较旧的Android设备上均可正常运行。它只需要至少 Java 6 。
String dateAsString = selectedDate.toString();
LocalDate recreatedLocalDate = LocalDate.parse(dateAsString);
System.out.println(recreatedLocalDate);
导入日期和时间类。org.threeten.bp
。java.time
向Java 6和7(JSR-310的ThreeTen)的反向端口。答案 2 :(得分:0)
使用以下代码,
打开意图或按照你说的消息做吐司。
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();
}
}
}
修改强>
查看_rootView = inflater.inflate({your layout file},container,false);
cal =(CalendarView)_rootView.findViewById(R.id.calViewId);
答案 3 :(得分:0)
尝试以下代码行,这可能会有所帮助。干杯!!!
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();
}