0

我从数据库中获取日期,其中包含日期和时间戳,在 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) 。它没有用。知道怎么做吗?

4

3 回答 3

3

您的问题不是很清楚,因为您已经将数据作为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);
于 2012-11-14T12:26:09.660 回答
0

也许这就是你的意思:

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

于 2012-11-14T13:55:38.143 回答
0

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

LocalDate

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

要获得这样的对象,请java.util.Date通过调用添加到旧日期时间类的新方法来转换您的对象。我们需要Instant一路走来。该类代表UTCInstant时间线上的一个时刻,分辨率为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" );
于 2016-08-20T00:50:20.583 回答