如何将存储的日期和时间与 SimpleDateFormat 进行比较并显示通知?
How to compare stored date and time with SimpleDateFormat and display notification?
在我的应用程序中,我想根据用户已经设置的时间显示通知,并且我将日期和时间存储到本地数据库中。
我正在从本地数据库获取日期和时间,并与 SimpleDateFormat 进行比较,并像这样 Date 进行解析
SimpleDateFormat yourDateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm");
Date date = null;
try {
String date_time = "17-11-2017 15:10";
date = yourDateFormat.parse(date_time);
} catch (ParseException e) {
Log.e(TAG, "Parsing date time failed", e);
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Calendar current = Calendar.getInstance();
if (calendar.compareTo(current) <= 0) {
Toast.makeText(getApplicationContext(), "Invalid Date/Time", Toast.LENGTH_LONG).show();
} else {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent myIntent = new Intent(RemainderActivity.this, NotificationReceiver.class);
PendingIntent displayIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), displayIntent);
}
某些设备它在 7.0 android 版本以上工作正常,但在 7.0 版本以下它显示 java.lang.NullPointerException
像这样
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Date java.text.SimpleDateFormat.parse(java.lang.String)' on a null object reference
错误显示在这里 date = yourDateFormat.parse(date_time);
.
请帮帮我。
提前致谢。
好的,问题已更改,这是您的新解决方案:
在此之前:
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
添加:
Locale locale = new Locale("en","US")
然后替换:
Calendar calendar = Calendar.getInstance();
与:
Calendar calendar = Calendar.getInstance(locale);
看起来像这样:
Locale locale = new Locale("en","US")
Calendar calendar = Calendar.getInstance(locale);
calendar.setTime(date);
您提供的整个代码如下:
SimpleDateFormat yourDateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm");
Date date = null;
try {
String date_time = "17-11-2017 15:10";
date = yourDateFormat.parse(date_time);
} catch (ParseException e) {
Log.e(TAG, "Parsing date time failed", e);
}
Locale locale = new Locale("en","US")
Calendar calendar = Calendar.getInstance(locale);
calendar.setTime(date);
Calendar current = Calendar.getInstance();
if (calendar.compareTo(current) <= 0) {
Toast.makeText(getApplicationContext(), "Invalid Date/Time", Toast.LENGTH_LONG).show();
} else {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent myIntent = new Intent(RemainderActivity.this, NotificationReceiver.class);
PendingIntent displayIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), displayIntent);
}
要获取用户选择的日期,您可以使用它,
private void getSelectedDate() {
String myFormat = "dd/MM/yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
String new_date = sdf.format(cal.getTime());
System.out.println("DATE SELECTED IS :: " + new_date);
your_textview.setText(new_date);
}
代码很多,几行代码就可以设置闹钟。您需要做的是获取毫秒 DatePicker 或其他 API 的日期,并将您的 AlarmManager 配置为在该时间到期时触发。像这样:
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent myIntent = new Intent(RemainderActivity.this, NotificationReceiver.class);
PendingIntent displayIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() +
60000, alarmIntent);
以上代码将每 1 分钟(60000 毫秒)触发一次 BroadcastReceiver。只需将时间替换为用户设置的日期即可。
在我的应用程序中,我想根据用户已经设置的时间显示通知,并且我将日期和时间存储到本地数据库中。
我正在从本地数据库获取日期和时间,并与 SimpleDateFormat 进行比较,并像这样 Date 进行解析
SimpleDateFormat yourDateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm");
Date date = null;
try {
String date_time = "17-11-2017 15:10";
date = yourDateFormat.parse(date_time);
} catch (ParseException e) {
Log.e(TAG, "Parsing date time failed", e);
}
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
Calendar current = Calendar.getInstance();
if (calendar.compareTo(current) <= 0) {
Toast.makeText(getApplicationContext(), "Invalid Date/Time", Toast.LENGTH_LONG).show();
} else {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent myIntent = new Intent(RemainderActivity.this, NotificationReceiver.class);
PendingIntent displayIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), displayIntent);
}
某些设备它在 7.0 android 版本以上工作正常,但在 7.0 版本以下它显示 java.lang.NullPointerException
像这样
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.Date java.text.SimpleDateFormat.parse(java.lang.String)' on a null object reference
错误显示在这里 date = yourDateFormat.parse(date_time);
.
请帮帮我。
提前致谢。
好的,问题已更改,这是您的新解决方案:
在此之前:
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
添加:
Locale locale = new Locale("en","US")
然后替换:
Calendar calendar = Calendar.getInstance();
与:
Calendar calendar = Calendar.getInstance(locale);
看起来像这样:
Locale locale = new Locale("en","US")
Calendar calendar = Calendar.getInstance(locale);
calendar.setTime(date);
您提供的整个代码如下:
SimpleDateFormat yourDateFormat = new SimpleDateFormat("dd-MM-yyyy HH:mm");
Date date = null;
try {
String date_time = "17-11-2017 15:10";
date = yourDateFormat.parse(date_time);
} catch (ParseException e) {
Log.e(TAG, "Parsing date time failed", e);
}
Locale locale = new Locale("en","US")
Calendar calendar = Calendar.getInstance(locale);
calendar.setTime(date);
Calendar current = Calendar.getInstance();
if (calendar.compareTo(current) <= 0) {
Toast.makeText(getApplicationContext(), "Invalid Date/Time", Toast.LENGTH_LONG).show();
} else {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent myIntent = new Intent(RemainderActivity.this, NotificationReceiver.class);
PendingIntent displayIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
alarmManager.setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), displayIntent);
}
要获取用户选择的日期,您可以使用它,
private void getSelectedDate() {
String myFormat = "dd/MM/yyyy";
SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US);
String new_date = sdf.format(cal.getTime());
System.out.println("DATE SELECTED IS :: " + new_date);
your_textview.setText(new_date);
}
代码很多,几行代码就可以设置闹钟。您需要做的是获取毫秒 DatePicker 或其他 API 的日期,并将您的 AlarmManager 配置为在该时间到期时触发。像这样:
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent myIntent = new Intent(RemainderActivity.this, NotificationReceiver.class);
PendingIntent displayIntent = PendingIntent.getBroadcast(getBaseContext(), 0, myIntent, 0);
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
SystemClock.elapsedRealtime() +
60000, alarmIntent);
以上代码将每 1 分钟(60000 毫秒)触发一次 BroadcastReceiver。只需将时间替换为用户设置的日期即可。