日期时间转换为特定格式

时间:2012-02-14 18:05:57

标签: java datetime date datetime-format

我有一个类文件,其中日期字段的值类似于“1329242400”。 UI中的该值表示为“0天00:02:56”。 我在下面试过,但是我在1970年代得到了约会。

String attr = "1329242400";
Date cDate = new Date(Long.parseLong(attr));

输出为“Fri Jan 16 04:16:55 EST 1970”

尝试下面,

GregorianCalendar c = new GregorianCalendar();
c.setTime(cDate);
XMLGregorianCalendar dDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);

输出为“1970-01-16T04:16:55.200-05:00”

我应该采取什么其他转换方法才能获得“0天00:02:56”或“2月14日星期二00:02:56美国东部时间2011”?

3 个答案:

答案 0 :(得分:2)

构造函数希望时间戳以毫秒为单位,因此您的关闭时间为3个数量级:

Date cDate = new Date(Long.parseLong(attr) * 1000);
                                           ^^^^^^

答案 1 :(得分:1)

GregorianCalendar c = new GregorianCalendar();
c.setTime(cDate);
XMLGregorianCalendar dDt = DatatypeFactory.newInstance().newXMLGregorianCalendar(c);

SimpleDateFormat sdf = new SimpleDateFormat ("E MM dd hh:mm:ss z");
sdf.format(c.getTime());

http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html

答案 2 :(得分:1)

java.time

您的字符串 "1329242400" 是自称为“纪元”的标准基准时间(即 January 1, 1970, 00:00:00 GMT(或 UTC))以来的秒数。您可以使用 Instant#ofEpochSecond 将其转换为 InstantISO 8601 代表时间线上的一个瞬时点。它与时区无关(即时区偏移为 00:00 小时,在 modern date-time API 标准中用 Z 表示)。

您可以通过应用适用的 InstantZonedDateTime 转换为 ZoneId

import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime;

public class Main {
    public static void main(String[] args) {
        Instant instant = Instant.ofEpochSecond(Long.parseLong("1329242400"));
        System.out.println(instant);

        ZonedDateTime zdt = ZonedDateTime.ofInstant(instant, ZoneId.of("America/New_York"));
        System.out.println(zdt);
    }
}

输出:

2012-02-14T18:00:00Z
2012-02-14T13:00-05:00[America/New_York]

Trail: Date Time 中了解有关 ThreeTen-Backport* 的更多信息。


* 出于任何原因,如果您必须坚持使用 Java 6 或 Java 7,您可以使用 Java 8+ APIs available through desugaring,它将大部分 java.time 功能向后移植到 Java 6 & 7. 如果您正在为 Android 项目工作并且您的 Android API 级别仍然不符合 Java-8,请检查 How to use ThreeTenABP in Android Projecthttps://docs.microsoft.com/en-us/dotnet/api/system.decimal.tryparse?view=net-5.0