【问题标题】:What is shorter Java code equivalent to Now.ToString("yyyy-MM-dd") in VB.Net?与 VB.Net 中的 Now.ToString("yyyy-MM-dd") 等效的较短 Java 代码是什么?
【发布时间】:2018-12-05 09:28:33
【问题描述】:

我正在将 VB.Net 程序转换为 Java,我必须转换以下行

Dim s = Now.ToString("yyyy-MM-dd")

我编写了以下 Java 代码

Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String s = sdf.format(d);

我可以写在一行

String s = new SimpleDateFormat("yyyy-MM-dd").format(new Date());

在 Java 6 及更高版本中工作的 shorter 代码是什么?

是否有一些Java代码在调用日期对象的方法时生成日期格式的字符串(例如:Date.format("yyyy-MM-dd"))?

【问题讨论】:

  • 创建日期格式对象的成本很高。这样你就有机会重复使用它。但请注意 - 它不是线程安全的。也许这回答了为什么没有更短的替代方案的问题。
  • 我建议你避免使用SimpleDateFormat 类。它不仅过时了,而且出了名的麻烦。今天我们在java.time, the modern Java date and time API 中做得更好。
  • 不要追求短代码。而是争取清晰可读的代码。有时它们碰巧是相同的,有时较短的代码可读性较差。
  • String s = Now.ToString("yyyy-MM-dd"),那不是vb...
  • 是的,它不是 VB。我会改正的。

标签: java vb.net date migration date-formatting


【解决方案1】:

在 Java 6 及更高版本中工作的更短的 Java 代码是什么?

我想回答“Java 6 及更高版本”部分:deHaar 回答中的代码可以。我的版本是

    String now = LocalDate.now(ZoneId.systemDefault()).toString();

    DateTimeFormatter customFormatter = new DateTimeFormatter.ofPattern("uuuu-MM-dd");
    String now = LocalDate.now(ZoneId.systemDefault()).format(customFormatter);
  • 在 Java 8 及更高版本以及更新的 Android 设备(从 API 级别 26 起)中,内置了现代 API java.time。
  • 在 Java 6 和 7 中,获取 ThreeTen Backport,即新类的后向端口(对于 JSR 310,ThreeTen;请参阅底部的链接)。
  • 在(较旧的)Android 上使用 ThreeTen Backport 的 Android 版本。它被称为 ThreeTenABP。并确保从 org.threeten.bp 导入日期和时间类以及子包。

链接

【讨论】:

  • 我想投票,但我没有足够的声誉!感谢您对任何 Java 版本的回答。
【解决方案2】:

从 Java 8 开始,java.time 有几个有用的类。

如果您可能/可以使用 Java 8 或更高版本,那么您可以执行以下操作:

String now = LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE);

今天将在我的时区输出2018-12-05(您的时区可能不同)。

你只需要

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;

为了让它工作。 您也可以使用

应用自定义格式
DateTimeFormatter customFormatter = new DateTimeFormatter.ofPattern("yyyy-MM-dd");
String now = LocalDate.now().format(customFormatter);

【讨论】:

  • 对于第一个 sn-p,您也可以只使用 LocalDate.now().toString()。我建议给now 提供明确的时区,即使您只是使用LocalDate.now(ZoneId.systemDefault())。它更清楚地说明了您期望得到的结果。
  • 我想投票,但我没有足够的声誉!感谢您的回答。
  • 你可以接受它作为正确答案...如果你不能投票也没问题,我记得几个月前就遇到过这种情况;-)
  • 我已经接受了,但在我有 15 个声望之前它被拒绝了!对不起
  • 再次没问题,您可以投票和/或接受@OleV.V 给出的答案。等你有足够的声望以后再找我。
猜你喜欢
  • 1970-01-01
  • 2010-09-22
  • 1970-01-01
  • 1970-01-01
  • 2015-03-24
  • 2019-10-29
  • 2018-05-21
  • 1970-01-01
  • 2020-12-14
相关资源
最近更新 更多