Java中的日期到日期转换

Java中的日期到日期转换,java,date,days,Java,Date,Days,我可以使用下面的代码将日期转换为天 SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd"); String s1 = sfd.format(dateObj); String a1 [] = s1.split("-"); int year = Integer.parseInt(a1[0].toString()); int month = Integer.parseInt(a1[1])-1; int day = Integer.

我可以使用下面的代码将日期转换为天

 SimpleDateFormat sfd = new SimpleDateFormat("yyyy-MM-dd");
 String s1 = sfd.format(dateObj);
 String a1 [] = s1.split("-");
 int year = Integer.parseInt(a1[0].toString());
 int month = Integer.parseInt(a1[1])-1;
 int day = Integer.parseInt((a1[2]));

 Calendar c1 = Calendar.getInstance();
 c1.set(year,month,day);

 days = c1.getTime().getTime()/(24*60*60*1000);
以上代码在我的系统中工作准确,该系统是时区为GMT+5.30的windows

然而,当系统中的时间为20.00时,EST或太平洋时区中的相同代码会在最终结果中增加一天乘以1

可能是什么问题

我们需要在代码中明确设置时区吗

输入日期没有任何时间戳。。
存储在
java.util.Date
而不是
java.sql.Date
中是否正确?

编辑:根据Alex的评论,可能是代码开头的问题让我看不到你的真正目标

日期表示时间上的一个瞬间。根据时区的不同,这可能会发生在不同的日期,但您希望它如何影响事情呢?您想要自Unix纪元(始终为UTC)起的天数,还是自1970年1月1日起在特定时区内的天数?为什么要使用此“天数”而不是日期的表示形式,例如
LocalDate
?这里的用例是什么

编辑:如果您只想知道自Unix纪元以来的天数,可以跳过以下大部分:

days = dateObj.getTime() / (24 * 60 * 60 * 1000);

你不应该仅仅为了得到年/月/日而进行格式化。只需创建一个
日历
,设置相关时区,使用您已经获得的
dateObj
调用
setTime
,然后清除日历的小时/分钟/秒部分

但是,你应该明确地指定你想考虑的时区——<代码>日期<代码>代表一个时刻,这意味着不同时区的不同日期。


您还应该考虑使用它,使所有这些都更简单,并且具有特定的日期类型(<代码> LoalDeals>代码)。这还可以很容易地找到Unix纪元与特定日期之间的天数,而无需自己进行除法。

是否要获取自1970年1月1日以来的天数,忽略时区或尊重时区?我认为您回答了错误的问题。根据他的密码,他想知道自1970年1月1日以来的天数。@AlexR:嗯,这部分取决于你所说的日期是什么意思,以及你所说的1970年1月1日是什么意思。这是本地纪元还是Unix纪元?我必须计算自纪元起的天数,输入为2011-03-18-自纪元起的天数为15051。@GKD:自Unix纪元起,即UTC?如果是这样的话,为什么还要为所有的转换而烦恼呢?为什么不使用最后一行,而是使用
dateObj
?(您的输入是
Date
对象,而不是字符串-重要的区别。)