如何将整数(例如19000101)转换为java.util.Date?

时间:2014-08-23 05:41:31

标签: java date integer data-conversion

这是我的代码:

Integer value = 19000101 ;         

如何将上面以YYYYMMDD格式表示的整数转换为YYYY-MM-DD中的java.util.Date格式?

5 个答案:

答案 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.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.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 不需要 Android API 级别 26 吗?

java.time 在较旧和较新的 Java 版本以及较旧和较新的 Android 设备上都能很好地工作。它只需要至少 Java 6

  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 开始)中,内置了现代 API。
  • 在非 Android Java 6 和 7 中获得 ThreeTen Backport,现代类的向后移植(ThreeTen for JSR 310;请参阅底部的链接)。
  • 在较旧的 Android 上,使用脱糖或 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。在后一种情况下,请确保使用子包从 org.threeten.bp 导入日期和时间类。

链接

答案 4 :(得分:0)

首先,你提供的值要长,然后按如下操作:

Date date = new Date(19000101L);
SimpleDateFormat formatter = new SimpleDateFormat("d MMM yyyy", new Locale(<language>, <country>));

Locale 的默认值是英语,所以你可以忽略它。