我的工作是一个版本的产品,将使用在印度的用户和工作从印度(GMT+5:30)。我们的服务器在美国。有开始日期和结束日期(例如-从8月01,00:00:00到8月31 11:59:59,它必须是活动的)的一些方案将被应用。我正在使用http://www.ruddwire.com/handy-code/date-to-millisecond-calculators/,因为我使用了这段代码,假设getTime具有一致的UTC时间-
// dateStr is what user enters on UI like 1/08/2013 format = dd/MM/yyyy
public static long getUTCDateWithFormat(String dateStr, String format) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat(format);
Date date = sdf.parse(dateStr);
return date.getTime();
}
因此,考虑到启动时间,当我从本地主机运行时,在8月1日,我得到了结果= 1375295400000,这意味着清华01年8月01日00:00:00 GMT+0530 (印度标准时间)。(因此,我知道UTC需要减去5小时30分钟的毫秒,因为在运行时,我必须将系统时间与此值进行比较。)
预期在从服务器(美国)运行时会保存类似的UTC,但它保存了1375336800000,这意味着清华8月1日11:30 GMT+0530 (印度标准时间),所以UTC的时间是不同的,除了5:30小时的缺陷外,还有11:30小时的缺陷。
没有在服务器上使用以下代码,但我希望得到类似的结果-
Calendar calendar = Calendar.getInstance();
String[] arr = dateStr.split("/");
calendar.set(new Integer(arr[2]), new Integer(arr[0]), new Integer(
arr[1]));
return calendar.getTime();
请帮我解决这个问题。而且,在运行时进行比较时,我必须使用新的Date(),那么应该如何呢?
发布于 2013-08-25 15:40:21
问题是您希望同时在服务器和客户端上看到当前时间(以UTC毫秒为单位)吗?如果是这种情况,调用System.currentTimeMillis()应该返回相同的值(在美国和印度,如果同时调用)。
如果不是这样的话,您可能希望将一个时区传递到GregorianCalendar中,如下所示:
GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("US/Pacific"))
如果问题持续存在的话,也许你可以详细说明一下?
发布于 2013-08-25 03:10:01
java.util.Date有许多问题,应该避免。相反,您应该使用java.util.Calendar,并可能使用特定的日历java.util.GregorianCalendar。日历在一致性方面表现得更好,并且不依赖于操作系统的功能/细节。
所以,开始使用公历。
https://stackoverflow.com/questions/18424996
复制相似问题