Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何在不考虑时区的情况下从给定的时间字符串中删除N分钟_Java_Java Time_Java Calendar - Fatal编程技术网

Java如何在不考虑时区的情况下从给定的时间字符串中删除N分钟

Java如何在不考虑时区的情况下从给定的时间字符串中删除N分钟,java,java-time,java-calendar,Java,Java Time,Java Calendar,我试图从给定的时间中删除分钟,但不知它是如何将时间转换为本地时区的 String timeStamp="20180623 05:58:15" ; dateFormat inputFormatter = new SimpleDateFormat("yyyyMMdd HH:mm:ss"); Date date = inputFormatter.parse(timeStamp); date.setMinutes(-2);

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

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分钟。

从理解
日期的工作原理开始。当你这么做的时候

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
也被弃用了很多

总体而言,更好的(起点)是使用Java8中引入的较新的日期/时间API(该API已用于早期版本)

这将输出

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

输入和输出仍在机器本地时区中考虑。

但是我不想在这里检查时区,我给出的时间应该减去2分钟

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


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

从了解日期的工作原理开始。当你这么做的时候

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
也被弃用了很多

总体而言,更好的(起点)是使用Java8中引入的较新的日期/时间API(该API已用于早期版本)

这将输出

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

输入和输出仍在机器本地时区中考虑。

但是我不想在这里检查时区,我给出的时间应该减去2分钟

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


哦,为了我的理智,停止用
String
格式管理日期/时间值-尽快将它们放入适当的容器中并从那里进行管理-我花了一周时间争论格式不正确的日期字符串,我不高兴Jan,不高兴这可能会有帮助:。只需跳过第一个片段,即使用过时的
Calendar
类的片段。好东西就在下面一点。这可能会有帮助:。只需跳过第一个片段,即使用过时的
Calendar
类的片段。好东西就在下面一点。以防万一别人不知道:以防万一别人不知道: