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
对象,而不是字符串-重要的区别。)