这是我的代码:
Integer value = 19000101 ;
如何将上面以YYYYMMDD
格式表示的整数转换为YYYY-MM-DD
中的java.util.Date
格式?
答案 0 :(得分:17)
首先,您必须使用指定的格式化程序将格式解析为日期对象
Integer value = 19000101;
SimpleDateFormat originalFormat = new SimpleDateFormat("yyyyMMdd");
Date date = originalFormat.parse(value.toString());
请记住,日期没有格式。它仅表示从1970-01-01开始的特定时间(以毫秒为单位)。但是,如果要将该日期格式化为预期格式,则可以使用其他格式化程序。
SimpleDateFormat newFormat = new SimpleDateFormat("yyyy-MM-dd");
String formatedDate = newFormat.format(date);
现在,您的formatedDate
字符串应包含以yyyy-MM-dd
答案 1 :(得分:6)
在我看来,你真的没有数字代表你的约会对象,你有三个数字的字符串:年,月和日。您可以使用一些简单的算法提取这些值。
Integer value = 19000101;
int year = value / 10000;
int month = (value % 10000) / 100;
int day = value % 100;
Date date = new GregorianCalendar(year, month, day).getTime();
答案 2 :(得分:2)
试试这个:
String myDate= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(new Date(19000101 * 1000L));
假设是自1970年1月1日以来的时间
修改: - 强>
如果您想从YYYYMMDD转换为YYYY-MM-DD格式
Date dt = new SimpleDateFormat("yyyyMMdd", Locale.ENGLISH).parse(String.ValueOf(19000101));
答案 3 :(得分:1)
我建议您在所有日期工作中使用 java.time,现代 Java 日期和时间 API。
我假设您希望整数值 19000101 为 1900 年 1 月 1 日。对于 java.time,这是一个单行。
Integer value = 19000101;
LocalDate date = LocalDate.parse(
value.toString(), DateTimeFormatter.BASIC_ISO_DATE);
System.out.println(date);
输出:
<块引用>1900-01-01
我正在利用这样一个事实,即您的格式与日期的基本 ISO 8601 格式一致。这种格式有一个内置的格式化程序。这是个好消息,因为编写我们自己的格式模式字符串总是容易出错。
如果您迫切需要一个老式的 java.util.Date
,通常用于尚未升级到 java.time 的遗留 API,则转换为:
Instant startOfDay = date.atStartOfDay(ZoneId.systemDefault()).toInstant();
Date oldfashionedDate = Date.from(startOfDay);
System.out.println(oldfashionedDate);
示例输出:
<块引用>EET 1900 年 1 月 1 日星期一 00:21:00
(这 21 分钟是由于 Date
类中的错误。此类错误存在于接近 1900 年的日期。)
java.time 在较旧和较新的 Java 版本以及较旧和较新的 Android 设备上都能很好地工作。它只需要至少 Java 6。
org.threeten.bp
导入日期和时间类。java.time
。java.time
向后移植到 Java 6 和 7(JSR-310 的 ThreeTen)。答案 4 :(得分:0)
首先,你提供的值要长,然后按如下操作:
Date date = new Date(19000101L);
SimpleDateFormat formatter = new SimpleDateFormat("d MMM yyyy", new Locale(<language>, <country>));
Locale 的默认值是英语,所以你可以忽略它。