使用SimpleDateFormat格式化以获取Unix时间戳

时间:2018-04-12 14:51:27

标签: java unix-timestamp

SimpleDateFormat必须格式化从unix时间戳到unix时间戳的格式?

拥有此代码:

String format = System.getProperty("myformat");
SimpleDateFormat sdf = new SimpleDateFormat(format); 
System.out.println(sdf.format(new java.util.Date(System.currentTimeMillis())));

我无法修改代码

获取Unix时间戳的属性myformat的值必须是什么?

2 个答案:

答案 0 :(得分:3)

Date是Unix时间戳长的包装器。

不幸的是,SimpleDateFormat没有Date.getTime()的输出。

即使带有LocalDateTime的新DateTimeFormatter也不提供长字符的字符串表示。

您可以从SimpleDateFormat扩展自己的日期/时间格式化程序。我认为' b'可以免费使用。这将是一项不必要的工作,因为使用Unix时间戳编号和其他单位(年,月,...)的格式的用例很少。

评论后。

<啊>啊哈,一个任务,一个谜题。您可以在人工派生日期滥用SimpleDateFormat符号。

Calendar calendar = new Calendar();
long t = calendar.getTimeInMillis(); // The Unix timestamp
int ms = (int)(t % 1000);
int yr = (int)(t / 1000);
calendar.set(Calendar.MILLIS, ms);
calendar.set(Calendar.YEAR, yr);
Date artificialDate = calendar.getTime();
String s = new SimpleDateFormat("ySSS").parse(date);

或者您可以创建自己的区域设置,而不是月份名称可以提供长的。 这似乎在这里被问到。但是我把这个功课留给你了。

答案 1 :(得分:0)

Unix时间戳是自1970年1月1日以来秒的计算(UTC)。另一方面,SimpleDateFormat 是用于格式化和解析日期的具体类。它只提供解析日期的格式化版本。

  

如果您确实需要使用SimpleDateFormat,这是您唯一的选择。

Date date = new Date();
System.out.println(date.getTime());

SimpleDateFormat sf = new SimpleDateFormat();
sf.format(date);
System.out.println(sf.getCalendar().getTimeInMillis());

输出:

1523545871501
1523545871501