只需要日历实例日期(不是时间)并与 Kotlin 中的日期字符串进行比较,因为它滞后
Need Calendar Instance only date (not time) and compare with date String in Kotlin as it lags
我只需要来自日历实例的日期而不是时间。每当我使用日历对象时,它 returns 日期和时间。
val calendar = Calendar.getInstance()
calendar.time. // Mon Nov 09 11:41:29 GMT 2020
我使用 SimpleDateFormat
更改了它
SimpleDateFormat("dd/MM/yyyy").format(date)
09/09/2020
我正在创建日历,所以列表中有大量数据。我在特定日期添加数据。所以我将日期与字符串日期进行比较。我的字符串日期格式是这样的:-
20/05/2020
因此存在太多性能问题,例如滞后视图。那么有什么我可以用来避免这一切的东西吗?
val calendarModel = dataList?.find {
SimpleDateFormat("dd/MM/yyyy").format(it.date) == item
}
Calendar#getTime
returns 表示此日历时间值的 java.util.Date
对象 这是一个毫秒值 是与纪元的偏移量, January 1, 1970 00:00:00.000 GMT
.
因此,java.util.Date
不代表真实的日期或时间或 date-time 对象。当您打印此毫秒值时,您的 JVM 会计算其 time-zone 中的日期和时间,当您打印其对象时,您会得到 java.util.Date#toString
returns。从这个解释中,您一定已经明白,无论时区如何,这个毫秒值都是相同的,因为它不是基于时区的值;相反,它被 java.util.Date#toString
伪造为基于时区的值。只是为了演示我刚才所说的内容,请查看以下程序的输出:
import java.util.Date;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) {
Date date = new Date();
System.out.println("Asia/Calcutta:");
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Calcutta"));
System.out.println(date.getTime());
System.out.println(date);
System.out.println("\nEurope/London:");
TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
System.out.println(date.getTime());
System.out.println(date);
System.out.println("\nAfrica/Johannesburg:");
TimeZone.setDefault(TimeZone.getTimeZone("Africa/Johannesburg"));
System.out.println(date.getTime());
System.out.println(date);
System.out.println("\nAmerica/New_York:");
TimeZone.setDefault(TimeZone.getTimeZone("America/New_York"));
System.out.println(date.getTime());
System.out.println(date);
}
}
输出:
Asia/Calcutta:
1604747702688
Sat Nov 07 16:45:02 IST 2020
Europe/London:
1604747702688
Sat Nov 07 11:15:02 GMT 2020
Africa/Johannesburg:
1604747702688
Sat Nov 07 13:15:02 SAST 2020
America/New_York:
1604747702688
Sat Nov 07 06:15:02 EST 2020
这些class中的modern date-time API has real date-time classes. Given below is an overview:
正如您在这个 table 中所发现的,有一个 class、LocalDate
只表示日期(由年、月和日组成)。下面给出了现代 java.time
API:
的快速演示
import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId;
import java.time.ZoneOffset;
public class Main {
public static void main(String[] args) {
// A date with the given year, month and day-of-month
LocalDate date = LocalDate.of(2010, Month.NOVEMBER, 7);
System.out.println(date);
// Today (in the JVM's timezone)
LocalDate today = LocalDate.now(); // Same as LocalDate.now(ZoneId.systemDefault())
System.out.println(today);
// Today at UTC
LocalDate todayAtUTC = LocalDate.now(ZoneOffset.UTC);
System.out.println(todayAtUTC);
// Today in India
LocalDate todayInIndia = LocalDate.now(ZoneId.of("Asia/Calcutta"));
System.out.println(todayAtUTC);
}
}
输出:
2010-11-07
2020-11-07
2020-11-07
2020-11-07
了解有关现代 date-time API 的更多信息
建议: java.util
的 date-time API 及其格式 API、SimpleDateFormat
已过时和 error-prone。我建议你应该完全停止使用它们并切换到 modern date-time API.
如果您正在为 Android 项目工作,并且您的 Android API 水平仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring and 。
我只需要来自日历实例的日期而不是时间。每当我使用日历对象时,它 returns 日期和时间。
val calendar = Calendar.getInstance()
calendar.time. // Mon Nov 09 11:41:29 GMT 2020
我使用 SimpleDateFormat
更改了它SimpleDateFormat("dd/MM/yyyy").format(date)
09/09/2020
我正在创建日历,所以列表中有大量数据。我在特定日期添加数据。所以我将日期与字符串日期进行比较。我的字符串日期格式是这样的:-
20/05/2020
因此存在太多性能问题,例如滞后视图。那么有什么我可以用来避免这一切的东西吗?
val calendarModel = dataList?.find {
SimpleDateFormat("dd/MM/yyyy").format(it.date) == item
}
Calendar#getTime
returns 表示此日历时间值的 java.util.Date
对象 这是一个毫秒值 是与纪元的偏移量, January 1, 1970 00:00:00.000 GMT
.
因此,java.util.Date
不代表真实的日期或时间或 date-time 对象。当您打印此毫秒值时,您的 JVM 会计算其 time-zone 中的日期和时间,当您打印其对象时,您会得到 java.util.Date#toString
returns。从这个解释中,您一定已经明白,无论时区如何,这个毫秒值都是相同的,因为它不是基于时区的值;相反,它被 java.util.Date#toString
伪造为基于时区的值。只是为了演示我刚才所说的内容,请查看以下程序的输出:
import java.util.Date;
import java.util.TimeZone;
public class Main {
public static void main(String[] args) {
Date date = new Date();
System.out.println("Asia/Calcutta:");
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Calcutta"));
System.out.println(date.getTime());
System.out.println(date);
System.out.println("\nEurope/London:");
TimeZone.setDefault(TimeZone.getTimeZone("Europe/London"));
System.out.println(date.getTime());
System.out.println(date);
System.out.println("\nAfrica/Johannesburg:");
TimeZone.setDefault(TimeZone.getTimeZone("Africa/Johannesburg"));
System.out.println(date.getTime());
System.out.println(date);
System.out.println("\nAmerica/New_York:");
TimeZone.setDefault(TimeZone.getTimeZone("America/New_York"));
System.out.println(date.getTime());
System.out.println(date);
}
}
输出:
Asia/Calcutta:
1604747702688
Sat Nov 07 16:45:02 IST 2020
Europe/London:
1604747702688
Sat Nov 07 11:15:02 GMT 2020
Africa/Johannesburg:
1604747702688
Sat Nov 07 13:15:02 SAST 2020
America/New_York:
1604747702688
Sat Nov 07 06:15:02 EST 2020
这些class中的modern date-time API has real date-time classes. Given below is an overview:
正如您在这个 table 中所发现的,有一个 class、LocalDate
只表示日期(由年、月和日组成)。下面给出了现代 java.time
API:
import java.time.LocalDate;
import java.time.Month;
import java.time.ZoneId;
import java.time.ZoneOffset;
public class Main {
public static void main(String[] args) {
// A date with the given year, month and day-of-month
LocalDate date = LocalDate.of(2010, Month.NOVEMBER, 7);
System.out.println(date);
// Today (in the JVM's timezone)
LocalDate today = LocalDate.now(); // Same as LocalDate.now(ZoneId.systemDefault())
System.out.println(today);
// Today at UTC
LocalDate todayAtUTC = LocalDate.now(ZoneOffset.UTC);
System.out.println(todayAtUTC);
// Today in India
LocalDate todayInIndia = LocalDate.now(ZoneId.of("Asia/Calcutta"));
System.out.println(todayAtUTC);
}
}
输出:
2010-11-07
2020-11-07
2020-11-07
2020-11-07
了解有关现代 date-time API 的更多信息
建议: java.util
的 date-time API 及其格式 API、SimpleDateFormat
已过时和 error-prone。我建议你应该完全停止使用它们并切换到 modern date-time API.
如果您正在为 Android 项目工作,并且您的 Android API 水平仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring and