【问题标题】:DateFormat To DateTimeFormatterDateFormat 到 DateTimeFormatter
【发布时间】:2019-05-18 17:04:05
【问题描述】:

我可以摆脱这个问题,但我现在没有找到正确的答案。

是否可以在 DateTimeFormatter 上转换 DateFormat?

DateFormat dateFormat =  new SimpleDateFormat("MM/dd/yy HH:mm:ss", Locale.getDefault);

我想做这样的东西:

DateTimeFormatter.ofPattern((String)dateFormatter);

或者

(DateTimeFormatter)dateFormatter;

或者有没有办法获取在 DateFormat 中形成格式的字符串?

我想这样做是因为我读到 DateTimeFormater 是 Java8+ 处理日期的新方法,我需要保留旧的方法,因为它在项目的其他地方被多次使用。

谢谢!

【问题讨论】:

  • 你为什么不直接做DateTimeFormatter dtf = DateTimeFormatter.ofPattern("MM/dd/yy HH:mm:ss")?您可以申请 static final String format = "MM/dd/yy HH:mm:ss" 并将其用于老式和现代方式。
  • 嗯,因为它不是静态的,所以我需要在用户偏好等的情况下......第一行代码是一个例子,我不把它放在一边
  • 好的,那么您可以从某些用户偏好中获取String...请告诉我们您的代码中的源代码在哪里。

标签: java date-format


【解决方案1】:

您可以使用以下代码。

 DateTimeFormatter dateTimeFormatter = 
    DateTimeFormatter.ofPattern(((SimpleDateFormat) dateFormat).toPattern());

【讨论】:

  • 它通常会起作用,但在某些极端情况下它不起作用。并非所有格式模式字母都具有完全相同的含义,特别是字母的数量可能会在DateTimeFormatter 中施加它们在DateFormat 中不一定具有的含义。但这可能是我们能做的最好的了。见Convert SimpleDateFormat to DateTimeFormatter
  • 非常感谢,我没想到您可以将DateFormat 用作SimpleDateFormat 而不会丢失一些数据。在这种情况下,我不关心信件,所以 Ole 报告的问题对我来说不是问题。
  • 理论上你的DateFormat可能不是SimpleDateFormat,如果不是,这段代码就会崩溃。不过,在实践中,我怀疑这是否会发生。
  • 如果您的DateFormat 的区域设置可能不是默认设置,您可能也希望将其转移到您的DateTimeFormatter。由于它非常简单,我将把它作为练习留给读者。
  • 是的,但它可以在运行中随时更改,并且它已经更改了DateFormat,所以我只是将更改转移到DateTimeFormatter上会更轻松跨度>
猜你喜欢
  • 2016-09-21
  • 1970-01-01
  • 1970-01-01
  • 2023-03-08
  • 2022-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多