如何从Java中的日期时间获取日期

这是我的日期字符串,

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");
yanghao19840201 回答:如何从Java中的日期时间获取日期

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代表11或8代表08。对于Nov之类的月份缩写,您需要MMM
  • Z用于偏移量,例如+0000。尽管它确实出现在您的字符串中,但文本UTC在它之前。编辑:令人困惑的SimpleDateFormatUTC解析为时区,然后忽略字符串的其余部分。就我而言,我不希望依靠这种行为。
  • 我建议您使用格式化程序指定一个语言环境,以控制它在字符串中期望的语言。使用MMM表示月份缩写,如果您使用默认语言环境并且恰好是威尔士语,那么格式化程序将期望Tach表示11月。

链接

,

请勿使用传统的SimpleDateFormatDate类,请使用Java-8现代日期时间API类,首先使用输入格式date创建DateTimeFormatter

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

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MMM-dd-uuuu HH:mm:ss.SSS zzz(Z)");

然后使用OffsetDateTime解析具有特定偏移量(以您的情况为UTC)

    OffsetDateTime dateTime = OffsetDateTime.parse(dd,formatter);

然后获取LocalDate

    System.out.println(dateTime.toLocalDate());
,

您在SimpleDateFormatter类构造函数中提供的模式应与提供的输出匹配。 例如由于您将月份作为三个字母提供,因此请在模式中使用3 M。

String dd = "Nov-08-2019 07:00:28";

    Date date = null;
  try {
      date = new SimpleDateFormat("MMM-dd-yyyy HH:mm:ss").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");
}
,

我可以通过更改以下格式来修复它:

"MMM-dd-yyyy HH:mm:ss.SSS Z"

这也可以处理毫秒。

希望这会有所帮助。祝你好运。

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

    Date date = null;
  try {
      date = new SimpleDateFormat("MMM-dd-yyyy hh:mm:ss.S 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");

这可能会对您有所帮助。

,

您输入的字符串是

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

您想要的是

yyyy-MM-dd

首先,您不可能因为该代码而获得yyyy-MMM-dd

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

          Date date = null;
        try {
            date = new SimpleDateFormat("MMM-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");
,

“ Nov”被称为“ MMM”格式,因此它将引发异常。 尝试使用以下代码:https://onlinegdb.com/H1keFI5oS

import java.util.Date;
import java.text.SimpleDateFormat;

public class Main
{
     public static void main(String []args){
        String dd = "Nov-08-2019 07:00:28.190 UTC(+0000)";

        Date date = null;
        try {
            date = new SimpleDateFormat("MMM-dd-yyyy HH:mm:ss").parse(dd);
        } catch (Exception e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }

        String newstr = new SimpleDateFormat("yyyy-MM-dd").format(date);
        System.out.println("\n"+newstr+"\n");
     }
}
本文链接:https://www.f2er.com/3105446.html

大家都在问