java - 如何在java中从日期时间获取日期

标签 java datetime-format

这是我的日期字符串,

String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";

我只想获取格式为“yyyy-MM-dd”的日期。 我怎样才能得到这种格式的日期。 我尝试使用以下代码,但它不起作用。

String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";

          Date date = null;
        try {
            date = new SimpleDateFormat("MM-dd-yyyy HH:mm:ss Z").parse(dd);
        } catch (ParseException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
          String newstr = new SimpleDateFormat("yyyy-MM-dd").format(date);
           System.out.println("\n"+newstr+"\n");

最佳答案

java.time

使用现代 Java 日期和时间 API java.time,如果您知道如何操作,这将非常简单:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(
            "MMM-dd-uuuu HH:mm:ss.SSS zzz(xx)", Locale.ROOT);
    String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";
    LocalDate date = LocalDate.parse(dd, formatter);
    System.out.println(date);

输出是:

2019-11-08

如我们所见,您的字符串采用 UTC 格式。我假设您还想要 UTC 日期。如果不是,我们需要解析成 ZonedDateTime,转换成您想要的区域,然后格式化成您想要的输出格式,只有日期。

我假设 UTC(+0000) 是时区缩写,后跟括号中的偏移量。

您尝试使用的日期和时间类 DateSimpleDateFormat 设计不佳且早已过时,后者尤其麻烦。你不应该使用它们。 java.time 非常有用。

你的代码出了什么问题?

  • MM 代表两位数的月份,例如 11 代表十一月或 08 代表八月。对于像 Nov 这样的月份缩写,您需要 MMM
  • Z 用于偏移,如 +0000。虽然这确实出现在您的字符串中,但文本 UTC 出现在它之前。编辑:令人困惑的 SimpleDateFormatUTC 解析为时区,然后忽略字符串的其余部分。就我而言,我不应该依赖这种行为。
  • 我建议您为格式化程序指定一个语言环境,以控制它希望在字符串中使用哪种语言。使用 MMM 表示月份缩写,如果您依赖默认语言环境并且它恰好是威尔士语,则您的格式化程序将期望使用 Tach 表示 11 月。

链接

关于java - 如何在java中从日期时间获取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58849227/

相关文章:

java - 如何使用流在 Java 中将 short[] 转换为 List<Short>?

java - 在不使用单例的情况下将类限制为一个实例?

mysql - SQL - 转换日期时间格式

java - DateTimeFormatter 不能与 ofPattern 或 OFFSET 一起使用

ruby-on-rails - rails - 在保存到服务器之前将 DateTime 转换为 UTC

java - 使用不必要的时间和时区解析和格式化 LocalDate

java - addView 添加 View 但没有显示它

java - spring中@component的xml配置表示是什么

java - 为什么String类扩展了Object

javascript - 使用 html 的 javascript 显示特定时区的日期/日期和时间