如何在Java中将字符串日期设置为日历
我在Android中有一个日历,当我将时间设置为日历后,将自定义日期作为默认日期传递给我的日历时。当我点击日历获取默认日期时,我得到的是一个以前的日期。对于ex-02/02/2021。 我怎么了?如何获取我在日历上传递的日期? 旧式日期时间API(如何在Java中将字符串日期设置为日历,java,android,date,Java,Android,Date,我在Android中有一个日历,当我将时间设置为日历后,将自定义日期作为默认日期传递给我的日历时。当我点击日历获取默认日期时,我得到的是一个以前的日期。对于ex-02/02/2021。 我怎么了?如何获取我在日历上传递的日期? 旧式日期时间API(java.utildate-time类型及其格式类型,SimpleDateFormat)已过时且容易出错。建议完全停止使用它,并切换到java.time,即* 使用现代API的解决方案: import java.time.Instant; impor
java.util
date-time类型及其格式类型,SimpleDateFormat
)已过时且容易出错。建议完全停止使用它,并切换到java.time
,即*
使用现代API的解决方案:
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String dbDate = "03/02/2021";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d/M/u", Locale.ENGLISH);
LocalDate date = LocalDate.parse(dbDate, dtf);
ZonedDateTime zdtUtc = date.atStartOfDay(ZoneId.of("Etc/UTC"));
Instant instant = zdtUtc.toInstant();
long millis = instant.toEpochMilli();
System.out.println(instant);
System.out.println(millis);
}
}
2021-02-03T00:00:00Z
1612310400000
输出:
import java.time.Instant;
import java.time.LocalDate;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String dbDate = "03/02/2021";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("d/M/u", Locale.ENGLISH);
LocalDate date = LocalDate.parse(dbDate, dtf);
ZonedDateTime zdtUtc = date.atStartOfDay(ZoneId.of("Etc/UTC"));
Instant instant = zdtUtc.toInstant();
long millis = instant.toEpochMilli();
System.out.println(instant);
System.out.println(millis);
}
}
2021-02-03T00:00:00Z
1612310400000
现在,您可以将millis
设置为builder
,如下所示:
builder.setSelection(millis);
Date utilDate = Date.from(instant);
出于任何原因,如果您需要将此Instant
对象转换为java.util.Date
对象,可以按如下操作:
builder.setSelection(millis);
Date utilDate = Date.from(instant);
从了解有关*的更多信息
*无论出于何种原因,如果您必须坚持使用Java6或Java7,您可以使用哪个backport将大部分Java.time功能移植到Java6&7。如果您正在为Android项目工作,并且您的Android API级别仍然不符合Java-8,请检查并确认。
最有可能是时区问题。那么解决方案是什么呢,先生?我不是android开发者,所以我不知道日期选择器组件,但问题很常见,很多时候这种行为会发生,因为组件和设备没有设置为同一时区,所以他们对日期的解释不同。啊,没有问题,老板,我查一下。Arvind,但是当使用DateTimeFormatter.of模式时,它说使用它的最低API级别是26,而当前的API级别是19,那么有没有办法在API 19中也运行相同的API?谢谢老板,你太棒了,我现在在我的项目中使用ThreeTenABP。。