我需要计算一个基于日期的值。因此,我首先使用date format类解析日期,然后使用getTime()获取毫秒数。用这些毫秒,我会计算出一些值。但是getTime()在不同的服务器上返回不同的值。我们在印度开发,在那里我得到了正确的值,但在美国服务器上我得到了不同的值。
场景:
public class Test {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
String now = "11/03/2018";
Date UsualDateformat = sdf.parse(now);
System.out.println(UsualDateformat.getTime());
}
}上面是一个示例代码,但我的实际代码是一个drl文件(drools)中的规则。此程序返回"1541183400000“,我转换为日期是”星期六2018年11月3日00:00:00“。但在美国服务器im得到"1541217600000”等于日期“星期六2018年11月3日09:30:00”。因此,当我使用这个值时,我会遇到边际小数点格式问题。如何解决这个问题?
提前感谢!
发布于 2017-11-16 13:54:33
您需要在SimpleDateFormat上设置时区,以便在不同地域的服务器上保持一致。例如:
public class Test {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
sdf.setTimeZone(TimeZone.getTimeZone("GMT"));
....
}
}发布于 2017-11-16 13:52:46
你会得到这些不同的值,因为你在美国和印度的服务器之间的时差是9小时30。
这与浮点无关,而与时区有关。
解决此问题的一种方法是始终在同一时区内工作(例如印度)
发布于 2017-11-16 15:10:34
这段代码可能对你有用,
public static String getGmtTime(String timezone) {
return ZonedDateTime
.now()
.withZoneSameInstant(ZoneId.of(timezone))
.toLocalDateTime()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}将timezone作为America/Los_Angeles传递以获取具有适当时区的时间,可以在here中找到时区
https://stackoverflow.com/questions/47322507
复制相似问题