Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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—获得一致的UTC值,而不考虑服务器_Java_Datetime_Utc_Epoch_Java.util.date - Fatal编程技术网

Java—获得一致的UTC值,而不考虑服务器

Java—获得一致的UTC值,而不考虑服务器,java,datetime,utc,epoch,java.util.date,Java,Datetime,Utc,Epoch,Java.util.date,我正在开发一个产品版本,该产品将由印度用户使用,我在印度工作(GMT+5:30)。我们的服务器在我们里面。将应用具有开始日期和结束日期的某些方案(例如,从8月1日00:00:00到8月31日11:59:59,必须处于活动状态)。 我正在使用 我使用了这段代码,假设getTime具有一致的UTC时间- // dateStr is what user enters on UI like 1/08/2013 format = dd/MM/yyyy public static long getUTCDa

我正在开发一个产品版本,该产品将由印度用户使用,我在印度工作(GMT+5:30)。我们的服务器在我们里面。将应用具有开始日期和结束日期的某些方案(例如,从8月1日00:00:00到8月31日11:59:59,必须处于活动状态)。 我正在使用 我使用了这段代码,假设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();
}
所以考虑到开始时间,当我从localhost运行8月1日时,我得到的结果是=1375295400000,这意味着2013年8月1日星期四00:00:00 GMT+0530(印度标准时间)。(因此我知道UTC需要减去5小时30分钟毫秒,因为在运行时,我必须将系统时间与该值进行比较。)

从服务器(美国)运行时,预期会保存类似的UTC,但它保存了1375336800000 这意味着2013年8月1日星期四11:30:00 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();

请帮我解决这个问题。另外,在运行时进行比较时,我必须使用new Date(),那么应该如何使用呢?

java.util.Date有许多问题,应该避免。您应该改为使用java.util.Calendar,可能还应该使用特定的Calendar java.util.GregorianCalendar。日历在一致性方面表现得更好,并且不依赖于操作系统功能/详细信息


所以,开始使用

问题是否在于您希望同时在服务器和客户端上查看当前时间(以UTC毫秒为单位)?如果是这种情况,则调用System.currentTimeMillis()应返回相同的值(如果同时调用,则在美国和印度)

如果不是这样的话,您可能希望将时区传递到GregoriaCalendar中,如下所示:

GregorianCalendar cal1 = new GregorianCalendar(TimeZone.getTimeZone("US/Pacific"))

如果问题仍然存在,也许您可以详细说明一下?

谢谢您尝试使用公历。在日期时间转换方面没有太多的经验。如果您能提供一些特定于该问题的代码,这将非常有帮助。