【问题标题】:How to set the string to date dataType in java如何在java中将字符串设置为日期数据类型
【发布时间】:2012-11-02 22:42:05
【问题描述】:

我从数据库中获取日期,其中包含日期和时间戳,在 UI 中它同时显示日期和时间戳,但我只想显示日期 (yyyy-MM-dd)。我已完成更改,但无法正确设置。

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
String startDate = dateFormat.format(dataObj.getReportStartDate());
//The above startDate will be of the format : 2012-11-08

我希望将 String 格式的 startDate 设置为 Date 数据类型。

dataIndexObj.setReportStartDate(startDate);
// Here the setReportStartDate is of the type date(), I cannot change its type to string.

我也尝试过 parse(startDate) 。它没有用。知道怎么做吗?

【问题讨论】:

  • “它没有用”是什么意思?是否存在编译错误,是否在运行时抛出异常,它没有按照您的预期执行吗?
  • 我收到错误,因为无法从字符串转换为日期。我希望将 mm-dd-yyyy 格式设置回数据类型为 Date 的变量。
  • 您可以将 java.util.Date 转换为格式化的字符串,但您不能告诉 Date 对象如何在内部对其进行格式化。

标签: java string date time timestamp


【解决方案1】:

您的问题不是很清楚,因为您已经将数据作为 Date - 您最初格式化的值。

如果您的意思是您将从 UI 中以String 的形式返回,并且需要对其进行转换,您只需使用parse 而不是format

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
// TODO: Set the time zone as well...

Date date = dateFormat.parse(text);

【讨论】:

    【解决方案2】:

    也许这就是你的意思:

    在您的数据库中创建 2 列。首先是字符串的类型和另一个日期。因此,当您需要字符串类型时,您可以调用字符串类型的列

    【讨论】:

      【解决方案3】:

      不要混淆java.util.Datejava.sql.Date。第一个名字不好,代表日期一天中的时间。第二个是一个糟糕的类,从第一个作为子类扩展,并假装只保存一个日期,而实际上它确实保存了一个设置为00:00:00 UTC 的时间。避免这些麻烦且设计不佳的旧类。它们现在是遗留的,被 java.time 类所取代。

      LocalDate

      LocalDate 类表示没有时间和时区的仅日期值。

      要获得这样的对象,请通过调用添加到旧日期时间类的新方法来转换您的 java.util.Date 对象。我们需要一个InstantInstant 类代表UTC 时间线上的一个时刻,分辨率为nanoseconds

      Instant instant = myUtilDate.toInstant();
      

      也许您的数据库中有一个 java.sql.Timestamp 对象。

      Instant instant = myTimestamp.toInstant();
      

      指定时区。时区至关重要,因为在任何特定时刻,全球各地的日期都会因时区而异。

      ZoneId z = ZoneId.of( "America/Montreal" );
      ZonedDateTime zdt = instant.atZone( z );
      

      从中提取您的 LocalDate 对象。

      LocalDate ld = zdt.toLocalDate();  // A date-only value, truncating time-of-day and forgetting time zone.
      

      要生成所需格式的字符串,只需调用toString。该格式是标准的 ISO 8601 格式。 java.time 类在解析/生成日期时间值的字符串表示时默认使用 ISO 8601 格式。

      String output = ld.toString();
      

      往另一个方向发展。

      LocalDate ld = LocalDate.parse( "2012-11-08" );
      

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-30
        • 2013-03-06
        • 2013-05-27
        • 1970-01-01
        相关资源
        最近更新 更多