【问题标题】:Format using SimpleDateFormat to get a Unix-Timestamp [closed]使用 SimpleDateFormat 格式化以获得 Unix-Timestamp [关闭]
【发布时间】:2018-04-12 14:51:27
【问题描述】:

SimpleDateFormat 必须以何种格式从 unix 时间戳格式化为 unix 时间戳?

拥有此代码:

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

我无法修改代码

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

【问题讨论】:

  • 嗯,为什么要投反对票?
  • 我没有投反对票,但您确定要使用 SimpleDateFormat 在 longs 上实现标识函数吗? (或者你的问题可能有错别字)
  • @Aaron 这是一个配置值,我只能修改配置值!
  • @PeterRader 那时我一定不明白你的问题。在您的问题中,“从 unix 时间戳到 unix 时间戳的格式”是什么意思?我假设您有一个框架强制您解析日期以生成时间戳,并且您有一个数据源已经是时间戳,但无论如何您都必须使用 SimpleDateFormat 进行解析,因此很难找到一种能够同时解析时间戳和格式化为时间戳。

标签: java unix-timestamp


【解决方案1】:

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

很遗憾,SimpleDateFormat 没有Date.getTime() 的输出。

即使是带有DateTimeFormatter 的新LocalDateTime 也不提供long 的字符串表示形式。

您可以从 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);

或者您可以创建您的自己的区域设置,而不是使用月份名称来提供长名称。 这似乎是在这里问的。但我把作业留给你。

【讨论】:

  • 嘿乔普,我不允许修改代码。我只能配置格式。
  • 在JVM中插入一个代理来在运行时修改字节码呢?或者也许接受您的问题没有简单的解决方案,并且您需要在更高级别重新构建它(您真的需要使用强制您使用 SimpleDateFormats 来格式化输出的现有流程吗?是否有可能将处理分成两部分,使用现有的流程生成 ISO 日期,这些日期将由另一个进程映射到时间戳?unix 时间戳真的是输出格式的好选择吗?等等)
  • @Aaron 从来没有听说过国王提出不可能的要求来赢得公主的手?这似乎是同一种浪费。我希望公主很漂亮。
【解决方案2】:

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

【讨论】:

  • 这没有使用 SimpleDateFormat。
  • 我编辑了这个问题,现在可能更清楚了。
  • 这也是错误的,输出不是格式函数的结果。
  • 我不认为你可以通过使用模式来获取 unix 时间戳
  • 请更改您对此声明的回答,否则您的回答会让人感到困惑。
猜你喜欢
  • 2014-07-23
  • 2012-05-05
  • 2019-05-13
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多