【问题标题】:How to remove timezone when convert from Date to DateTime从日期转换为日期时间时如何删除时区
【发布时间】:2018-09-12 15:39:59
【问题描述】:

我有一个从数据库中获取的日期,我想将其转换为 DateTime 并将其设置为开始日期。我写在下面:

Date fromDate = studentDateJoin.getDate();
//result: fromDate = Mon Jan 01 00:00:02 ICT 2018
//convert to DateTime 
DateTime newDate = new DateTime(fromDate);

但是当我转换它时,在转换后添加时区。 newDate 看起来像:

newDate = 2018-01-01T14:13:04.574Z+7

我有一个问题:如何将其转换为开始日期并删除时区:示例我想将其转换为:

 //Convert it begin day and remove time zone
 newDate = 2018-01-01T00:00:00.00;

如何将其转换为 beginDay 并删除时区:谢谢

【问题讨论】:

  • Java 8 中没有 DateTime 类,但 Joda-Time 库中有 DateTime。你的意思是写LocalDateTime
  • 是的。对不起,因为我工作了两个 DateTime 并且错了。谢谢我有编辑。那你能帮帮我吗?
  • 如果你想让它看起来像2018-01-01T00:00:00.00Z,最后是Z,那么它不是LocalDateTime,而是InstantOffsetDateTime或@987654333 @.
  • new LocalDateTime(fromDate) 在 Java 中不存在......
  • 我只想删除 TimeZone 并设置它开始一天

标签: java datetime time jodatime


【解决方案1】:

更新:添加了 Joda-Time 版本,因为问题已从 java-8 更改为 jodatime


如果您有 Joda-Time DateTime,请使用 toLocalDate()toLocalDateTime(...)

DateTime dateTime = new DateTime(2018, 1, 1, 14, 13, 04, 574);
System.out.println(dateTime);
LocalDate localDate = dateTime.toLocalDate();
System.out.println(localDate);
LocalDateTime localDateTime = localDate.toLocalDateTime(LocalTime.MIDNIGHT);
System.out.println(localDateTime);
2018-01-01T14:13:04.574-05:00
2018-01-01
2018-01-01T00:00:00.000

如果您有“从数据库获取日期”,即java.sql.Date,则使用toLocalDate()atStartOfDay()

java.sql.Date sqlDate = new java.sql.Date(118, 0, 1);
System.out.println(sqlDate);
LocalDate localDate = sqlDate.toLocalDate();
System.out.println(localDate);
LocalDateTime localDateTime = localDate.atStartOfDay();
System.out.println(localDateTime);
2018-01-01
2018-01-01
2018-01-01T00:00

如果您有java.sql.Timestamp,请使用toLocalDateTime()truncatedTo(...)

java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(118, 0, 1, 14, 13, 04, 574000000);
System.out.println(sqlTimestamp);
LocalDateTime localDateTime = sqlTimestamp.toLocalDateTime();
System.out.println(localDateTime);
localDateTime = localDateTime.truncatedTo(ChronoUnit.DAYS);
System.out.println(localDateTime);
2018-01-01 14:13:04.574
2018-01-01T14:13:04.574
2018-01-01T00:00

如果您有java.util.Date,请使用toInstant()atZone(...)toLocalDate()atStartOfDay()

java.util.Date utilDate = new java.util.Date(118, 0, 1, 14, 13, 04);
System.out.println(utilDate);
Instant instant = utilDate.toInstant();
System.out.println(instant);
ZonedDateTime zonedDateTime = instant.atZone(ZoneId.systemDefault());
System.out.println(zonedDateTime);
LocalDateTime localDateTime = zonedDateTime.toLocalDate().atStartOfDay();
System.out.println(localDateTime);
Mon Jan 01 14:13:04 EST 2018
2018-01-01T19:13:04Z
2018-01-01T14:13:04-05:00[America/New_York]
2018-01-01T00:00

【讨论】:

  • 非常感谢。但我有疑问。如何将“Mon Jan 01 00:00:02 ICT 2018”输入 java.util.Date utilDate = new java.util.Date("Mon Jan 01 00:00:02 ICT 2018"); .我输入了它,但它无法转换。
  • @tbtrungit new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy").parse("Mon Jan 01 00:00:02 ICT 2018")
  • 如果我有 2018-01-01T14:13:04-05:00[America/New_York] 如何删除时区和结果看起来像 2018-01-01T00:00:00?
  • @tbtrungit ZonedDateTime.parse("2018-01-01T14:13:04-05:00[America/New_York]").toLocalDate().atStartOfDay()
  • 如果 ""2018-01-01T14:13:04-05:00[America/New_York]" 不是字符串和 2018-01-01T14:13:04-05:00[America/New_York ] 是 DateTime。我不需要解析,只需使用://结果为:2018-01-01T14:13:04-05:00[America/New_York] DateTime dateTime = result.toLocalDate().atStartOfDay() ?
猜你喜欢
  • 1970-01-01
  • 2020-01-23
  • 2018-11-03
  • 2022-12-17
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-02
相关资源
最近更新 更多