我有一个类文件,其中日期字段的值类似于“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”?
答案 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)
您的字符串 "1329242400"
是自称为“纪元”的标准基准时间(即 January 1, 1970, 00:00:00 GMT
(或 UTC))以来的秒数。您可以使用 Instant#ofEpochSecond
将其转换为 Instant
,ISO 8601 代表时间线上的一个瞬时点。它与时区无关(即时区偏移为 00:00
小时,在 modern date-time API 标准中用 Z
表示)。
您可以通过应用适用的 Instant
将 ZonedDateTime
转换为 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 Project 和 https://docs.microsoft.com/en-us/dotnet/api/system.decimal.tryparse?view=net-5.0。