3 回答
TA贡献1795条经验 获得超7个赞
避免遗留的日期时间类
您正在使用几年前被现代java.time类取代的可怕的旧日期时间类。
LocalDate
该类LocalDate表示没有时间、没有时区或从 UTC 偏移的仅日期值。
你的ToDo类应该有一个 type 的成员变量LocalDate。以及可选的 getter 方法。
public class ToDo {
public LocalDate whenDue ;
}
时区
时区对于确定日期至关重要。对于任何给定的时刻,日期在全球范围内因区域而异。例如,法国巴黎午夜过后几分钟是新的一天,而魁北克蒙特利尔仍然是“昨天” 。
如果未指定时区,JVM 会隐式应用其当前默认时区。该默认值可能会在运行时(!)期间随时更改,因此您的结果可能会有所不同。最好将您想要/预期的时区明确指定为参数。
以、或等格式指定适当的时区名称。永远不要使用 2-4 个字母的缩写,例如或因为它们不是真正的时区,不是标准化的,甚至不是唯一的(!)。Continent/RegionAmerica/MontrealAfrica/CasablancaPacific/AucklandESTIST
ZoneId z = ZoneId.of( "America/Montreal" ) ;
LocalDate today = LocalDate.now( z ) ;
如果你想使用 JVM 的当前默认时区,请求它并作为参数传递。如果省略,代码会变得模棱两可,因为我们不确定您是否打算使用默认值,或者您是否像许多程序员一样没有意识到这个问题。
ZoneId z = ZoneId.systemDefault() ; // Get JVM’s current default time zone.
或指定日期。您可以通过数字设置月份,1 月至 12 月的编号为 1-12。
LocalDate ld = LocalDate.of( 1986 , 2 , 23 ) ; // Years use sane direct numbering (1986 means year 1986). Months use sane numbering, 1-12 for January-December.
或者,更好的是,使用Month预定义的枚举对象,一年中的每个月一个。提示:Month在整个代码库中使用这些对象,而不是仅仅使用整数,以使您的代码更具自文档性、确保有效值并提供类型安全。Year&同上YearMonth。
LocalDate ld = LocalDate.of( 1986 , Month.FEBRUARY , 23 ) ;
比较
LocalDate在: isEqual, isBefore, isAfter,上比较使用方法equals。
循环您的待办事项,将日期与目标、今天的日期进行比较。
ZoneId z = ZoneId.of( "Africa/Tunis" ) ; // Or `ZoneId.systemDefault()`.
LocalDate ld = LocalDate.now( z ) ;
List< ToDo > todayToDos = new ArrayList<>() ;
for( ToDo todo : todos ) {
if( todo.whenDue.isEqual( today ) ) {
todayToDos.add( todo ) ;
}
}
TA贡献1836条经验 获得超13个赞
您可以使用System.currentTimeMillis()long 数据类型来获取高达毫秒的当前时间。
或者
您可以使用Date d = new Date();将日期作为 Date 对象获取并将其转换为所需格式的字符串,例如
Date d = new Date();
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(d);
这取决于您在 tvDueDate 中存储日期的数据类型和格式。
然后您可以将 Todos 项设置为 ListView 适配器,如这篇文章 Custom Adapter for List View中所示
编辑
您可以使用字符串在字符串中获取您的截止日期
String dueDate = tvDueDate.getText().toString();
然后做
public void showDailyTodo() {
Date d = new Date();
SimpleDateFormat df = new SimpleDateFormat("dd.mm.yyyy");
String formattedDate = df.format(d);
if(dueDate.equals(formattedDate)) {
// code that listview items with duedate today are shown.
}
}
TA贡献1783条经验 获得超4个赞
您可以使用 android 中的 DateUtils 库来检查到期日是否是今天。
这是官方文档的链接:https://developer.android.com/reference/android/text/format/DateUtils#isToday(long)
要获取 listview 项目,只需遍历项目并检查它们的截止日期是否是今天并过滤掉项目。您可以将这些项目传递给列表视图的适配器。对于单个项目的比较,粗略的实现是:
long timeInMillis = dueDate.getTime();
if (dateUtils.isToday(timeInMillis)){
//this is today's item, so add this to a list which is sent to the listview
}
添加回答
举报