Java 如何在不考虑时区的情况下从给定时间字符串中删除第 n 分钟
Java how to remove nth minute from given time string without considering time zone
我试图从给定时间中删除分钟,但它如何将时间转换为我当地的时区
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
class 使用它的 toString
方法将 Date
class 表示的 date/time 信息格式化为人类可读格式。反正 "convert" date/time 值
所以从上面获取你的代码(并对其进行修改以使其工作),它输出...
Before converting : Sat Jun 23 04:58:15 AEST 2018
20180623 04:58:15
在我的机器上 - 为什么值相同?因为输入没有任何时区信息,所以时间可能被视为机器本地时区(并且该值只是为了输出而格式化)。
Date
只是自 Unix 纪元以来的毫秒数的容器,它与格式无关——这意味着它不携带格式信息。
Date
也实际上已弃用 - 更不用说 setDate
也已被弃用
总体上更好的(起点)是使用 Java 8 中引入的较新的 date/time API(对于早期版本的 back port support API)
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,但由于您的输入不提供任何类型的信息,您需要选择 "how" 来最好地处理该问题。上面的示例只是 "assumes" 当地时间,但您可以使用 ZonedDateTime
并将其转换为执行操作的 "common" 时区,或者更好的是,让所有字符串都带有时区资讯
哦,为了我的理智,停止管理 String
格式的 date/time 值 - 尽快将它们放入适当的容器中并从那里管理它们 - 我已经花了一个星期的时间来处理格式不当的日期字符串,我不开心简,不开心
我试图从给定时间中删除分钟,但它如何将时间转换为我当地的时区
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
class 使用它的 toString
方法将 Date
class 表示的 date/time 信息格式化为人类可读格式。反正 "convert" date/time 值
所以从上面获取你的代码(并对其进行修改以使其工作),它输出...
Before converting : Sat Jun 23 04:58:15 AEST 2018
20180623 04:58:15
在我的机器上 - 为什么值相同?因为输入没有任何时区信息,所以时间可能被视为机器本地时区(并且该值只是为了输出而格式化)。
Date
只是自 Unix 纪元以来的毫秒数的容器,它与格式无关——这意味着它不携带格式信息。
Date
也实际上已弃用 - 更不用说 setDate
也已被弃用
总体上更好的(起点)是使用 Java 8 中引入的较新的 date/time API(对于早期版本的 back port support API)
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,但由于您的输入不提供任何类型的信息,您需要选择 "how" 来最好地处理该问题。上面的示例只是 "assumes" 当地时间,但您可以使用 ZonedDateTime
并将其转换为执行操作的 "common" 时区,或者更好的是,让所有字符串都带有时区资讯
哦,为了我的理智,停止管理 String
格式的 date/time 值 - 尽快将它们放入适当的容器中并从那里管理它们 - 我已经花了一个星期的时间来处理格式不当的日期字符串,我不开心简,不开心