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 吗?
意大利。
【问题讨论】:
这是从不使用糟糕的遗留类Date
、Calendar
、SimpleDateFormat
等的众多原因之一。仅使用 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