如何在Java中将字符串日期设置为日历

如何在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

我在Android中有一个日历,当我将时间设置为日历后,将自定义日期作为默认日期传递给我的日历时。当我点击日历获取默认日期时,我得到的是一个以前的日期。对于ex-02/02/2021。 我怎么了?如何获取我在日历上传递的日期?

旧式日期时间API(
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。。