Android DatePicker 和 Java 的 Date

Posted

技术标签:

【中文标题】Android DatePicker 和 Java 的 Date【英文标题】:Android DatePicker and Java's Date 【发布时间】:2012-01-17 18:43:09 【问题描述】:

我被这里描述的问题所困扰:android DatePicker year problem。简而言之,Android 的 DatePicker 期望以年为单位指定年份(2011 是 2011),而 Java 的 Date 类从 1900 开始(所以 2011 实际上是 111)。

除了在转换时添加和减去 1900 之外,还有更好的方法来混合 Date 和 DatePickers 吗?

意大利。

【问题讨论】:

这是从不使用糟糕的遗留类DateCalendarSimpleDateFormat 等的众多原因之一。仅使用 java.time 类。查看Answer by Avinash 中的现代解决方案。 【参考方案1】:

是的 - 不要使用 Date 中已弃用的方法来处理日/月/年值。 Date 仅代表时间的瞬间 - 如果您想将其转换为适当的人为分解为天、月、年等,您应该使用 Calendar - 并应用时区。

【讨论】:

【参考方案2】:

java.time

java.util 日期时间 API 及其格式化 API SimpleDateFormat 已过时且容易出错。建议完全停止使用,改用modern Date-Time API*

使用现代日期时间 API java.time 的解决方案:

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Locale;

public class Main 
    public static void main(String[] args) 
        int dpYear = 2010, dpMonth = 1, dpDayOfMonth = 15;

        // In DatePicker, the month is indexed starting at 0. Check
        // https://***.com/a/4467894/10819573 to learn more.
        dpMonth++;

        LocalDate date = LocalDate.of(dpYear, dpMonth, dpDayOfMonth);
        System.out.println(date);

        // Formatted output
        DateTimeFormatter dtf = DateTimeFormatter.ofPattern("EEE MMMM dd uuuu", Locale.ENGLISH);
        String formatted = dtf.format(date);
        System.out.println(formatted);
    

输出:

2010-02-15
Mon February 15 2010

ONLINE DEMO

Trail: Date Time 了解有关现代日期时间 API 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 ThreeTen-Backport,它将大部分 java.time 功能向后移植到 Java 6 和 7 . 如果您正在为一个 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 Java 8+ APIs available through desugaring 和 How to use ThreeTenABP in Android Project。

【讨论】:

以上是关于Android DatePicker 和 Java 的 Date的主要内容,如果未能解决你的问题,请参考以下文章

Android:DatePicker 和 DatePicker 对话框

Android的DatePicker和TimePicker-android学习之旅(三十八)

Android - 新的日历样式 DatePicker 和 TimePicker

如何更改 Android 中 DatePicker 和 TimePicker 对话框的默认颜色?

API 21 新 DatePicker 显示周数崩溃

Android中关闭DatePicker和NumberPicker等Picker类的可编辑模式