gpt4 book ai didi

Java如何从给定时间字符串中删除第n分钟而不考虑时区

转载 作者:行者123 更新时间:2023-12-01 19:52:10 24 4
gpt4 key购买 nike

我尝试从给定时间中删除分钟,但它如何将时间转换为我的本地时区

String timeStamp="20180623 05:58:15" ;   
dateFormat inputFormatter = new SimpleDateFormat("yyyyMMdd HH:mm:ss");
Date date = inputFormatter.parse(timeStamp);
date.setMinutes(-2);
logger.info("Before converting : "+date);
DateFormat dateFormat = new SimpleDateFormat("yyyyMMdd HH:mm:ss");

这里它转换为我的本地时间并从给定时间中减去 2 分钟,但我不想在这里检查时区,无论我给它什么时间都应该只减去 2 分钟。

最佳答案

首先要了解Date 的工作原理。当你这样做时...

logger.info("Before converting : "+date);

Date 类使用其 toString 方法将 Date 类表示的日期/时间信息格式化为人类可读的格式。它无论如何都不会“转换”日期/时间值

因此,从上面获取您的代码(并对其进行修改以使其正常工作),它会输出...

Before converting : Sat Jun 23 04:58:15 AEST 2018
20180623 04:58:15

在我的机器上 - 为什么值相同?由于输入没有任何时区信息,因此该时间可能被视为计算机本地时区(并且该值只是被格式化以供输出)。

Date 只是一个包含自 Unix 纪元以来的毫秒数的容器,它与格式无关 - 这意味着它不携带格式信息。

Date 也已被有效弃用 - 更不用说 setDate 也已被弃用

总体而言,更好的(起点)是使用 Java 8 中引入的较新的日期/时间 API(对于早期版本的 API,它具有 back port support)

    String timeStamp = "20180623 05:58:15";
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss", Locale.ENGLISH);
LocalDateTime ldt = LocalDateTime.parse(timeStamp, formatter);
ldt = ldt.minusMinutes(2);
System.out.println(ldt);
System.out.println(ldt.format(formatter));

这将输出...

2018-06-23T05:56:15
20180623 05:56:15

输入和输出仍被视为处于机器本地时区。

but I don`t want to check the time zone here instead, what ever time I give it should just subtract 2 minutes

请记住,API 仍然需要有一些时区概念,无论是本地时区还是 UTC/GMT,但由于您的输入不提供任何类型的信息,因此您需要在“如何最好地处理这个问题。上面的示例只是“假定”本地时间,但您可以使用 ZonedDateTime 并将其转换为执行操作的“通用”时区,或者更好的是,让所有字符串都包含时区信息

哦,为了我的理智,请停止管理 String 格式的日期/时间值 - 尽快将它们放入适当的容器中并从那里管理它们 - 我已经花了一周争论格式不正确的日期字符串,我不高兴 Jan,不高兴

关于Java如何从给定时间字符串中删除第n分钟而不考虑时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50996844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com