我在所有人列表的通知类显示中创建了BDay应用程序,但我只想显示当前日期。
在这段代码中,我必须与当前日期和我的数据库日期进行比较,我想只显示当前日期的人。
我想在RecyclerView中显示当前日期人员。
我在数据库中添加了静态数据。
我在另一个集会上已经失败,但不能消失
我是android编程的新手
我的静态数据库
dd MMMM
2 October
14 November
24 October
我的代码
private List<People> notificationList = new ArrayList<>();
private List<People> peopleListSelected = new ArrayList<>();
private RecyclerView recyclerView;
private NotificationAdapter notificationAdapter;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_notificatoin);
BuildData();
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
calender();
Calendar calendar = Calendar.getInstance();
for (People people : notificationList) {
try {
SimpleDateFormat sdf = new SimpleDateFormat("dd-MMMM");
String today = sdf.format(calendar.getTime());
String startDate = people.getDate() + "-" + people.getMonth();
if (today.equals(startDate)) {
Date date = sdf.parse(startDate);
calendar.setTime(date);
calendar.set(Calendar.HOUR_OF_DAY, 18);
calendar.set(Calendar.MINUTE, 35);
calendar.set(Calendar.SECOND, 0);
peopleListSelected.add(people);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
Intent intent1 = new Intent(Notification.this, MyReceiver.class);
PendingIntent pendingIntent = PendingIntent.getService(Notification.this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager am = (AlarmManager) Notification.this.getSystemService(Notification.this.ALARM_SERVICE);
am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);
recyclerView = (RecyclerView) findViewById(R.id.recycler_view);
notificationAdapter = new NotificationAdapter(getApplicationContext(), peopleListSelected);
RecyclerView.LayoutManager mLayoutManager = new LinearLayoutManager(getApplicationContext());
recyclerView.setLayoutManager(mLayoutManager);
recyclerView.setItemAnimator(new
DefaultItemAnimator()
);
recyclerView.setAdapter(notificationAdapter);
Button backwindow = (Button) findViewById(R.id.backwindow);
backwindow.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v) {
onBackPressed();
}
}
);
}
public void calender() {
}
public void clickMe(View view) {
Intent intent = new Intent(this, NotificationOpen.class);
this.startActivity(intent);
}
public void onBackPressed() {
super.onBackPressed();
}
private List<People> BuildData() {
DataBaseHelper db = new DataBaseHelper(getApplicationContext());
try {
db.createDataBase();
} catch (IOException ioe) {
throw new Error("Unable to create database");
}
if (db.open()) {
notificationList = db.getPeopleDate();
}
return notificationList;
}
}
答案 0 :(得分:0)
如果您为出生日期使用标准格式,并且使用取代麻烦的旧遗留日期时间类的java.time类,这项工作会容易得多。
ISO 8601格式定义了日期时间值的文本格式。对于仅日期值,格式为YYYY-MM-DD,例如1955-01-23
。对于没有一年的一个月,请用连字符替换年份:--01-23
。它可以作为文本存储在您的数据库中。
MonthDay
Java提供了MonthDay
类来表示一个月和一个月的日期。自动解析并生成上面讨论的ISO 8601字符串。
MonthDay md = MonthDay.parse( "--01-23" );
您可以在班级上存储此类MonthDay
个对象,例如birthDate
班级上的Person
。这样做可以使您的代码更加自我记录,提供类型安全性,并保证有效值(例如,2月31日)。
要将此值写入数据库,请通过调用toString
生成字符串。
String output = md.toString(); // Ex: --01-23
LocalDate
LocalDate
类表示没有时间且没有时区的仅限日期的值。
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因地区而异。例如,在Paris France午夜后的几分钟是新的一天,而Montréal Québec中仍然是“昨天”。
ZoneId z = ZoneId.of( "America/Montreal" );
LocalDate today = LocalDate.now( z );
您可以要求JVM当前的默认时区。但是要知道,当前默认值可以随时由共享此JVM的任何应用程序的任何线程中的任何代码进行更改。因此,当重要时,请与用户询问/确认时区。
ZoneId z = ZoneId.systemDefault(); // Caution: Can change at any moment.
要查看特定MonthDay
对象是否是今天要庆祝的生日,请进行比较。
MonthDay mdToday = MonthDay.from( today );
…
if( md.equals( mdToday ) ) {
… // Add to collection.
}
例如。
MonthDay mdToday = MonthDay.from( LocalDate.now( ZoneId.of( "America/Montreal" ) ) );
List<Person> birthdayCelebrants = new ArrayList<>();
for( Person person: people ) {
if( person.getBirthMonthDay().equals( mdToday ) ) {
birthdayCelebrants.add( person );
}
}
要生成用于显示日期值的字符串,请搜索DateTimeFormatter
类的Stack Overflow。
java.time框架内置于Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和&amp; SimpleDateFormat
现在位于Joda-Time的maintenance mode项目建议迁移到java.time。
要了解详情,请参阅Oracle Tutorial。并搜索Stack Overflow以获取许多示例和解释。规范是JSR 310。
从哪里获取java.time类?
ThreeTen-Extra项目使用其他类扩展java.time。该项目是未来可能添加到java.time的试验场。您可以在此处找到一些有用的课程,例如Interval
,YearWeek
,YearQuarter
和more。