我必须将字符串解析为日期,比如givenDate
,即EST时区。另外,我必须取当前日期,比如说美国东部时间的currentDate
。我现在的时区是IST(GMT+5:30)。
如果currentDate大于givenDate,那么我需要在currentDate中添加一天。
这是我已经实现的解决方案。
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
Calendar givenDate = Calendar.getInstance(TimeZone.getTimeZone("EST"));
givenDate .setTime(df.parse("01/08/2016"));
Calendar currentDate = Calendar.getInstance(TimeZone.getTimeZone("EST"));
if(currentDate.get(Calendar.YEAR) > givenDate .get(Calendar.YEAR) ||
currentDate.get(Calendar.DAY_OF_YEAR) > givenDate.get(Calendar.DAY_OF_YEAR)){
currentDate.add(Calendar.DATE, 1);
}
System.out.println("Final date : "+df.format(currentDate.getTime()));
有什么更好的解决方案吗?
此外,下面的事情一直在挠我的心。
考虑代码片段
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
Calendar givenDate = Calendar.getInstance(TimeZone.getTimeZone("EST"));
givenDate .setTime(df.parse("01/07/2016"));
System.out.println(givenDate .get(Calendar.DATE)); //6
System.out.println(givenDate .get(Calendar.DAY_OF_MONTH)); //6
System.out.println(givenDate .get(Calendar.DAY_OF_YEAR)); //6
为什么我的DATE、DAY_OF_MONTH和DAY_OF_YEAR得了6?我希望他们必须返回7,因为给定的日期是从2016年。
但如果我在上面代码的第一行后面加上下面一行,上面提到的字段将返回7。这可能是什么原因?
df.setTimeZone(TimeZone.getTimeZone("EST"));
您需要将时区设置到SimpleDateFormat类中,然后可以将解析的Date与当前时间进行比较:
SimpleDateFormat df = new SimpleDateFormat("MM/dd/yyyy");
df.setTimeZone(TimeZone.getTimeZone("EST"));
Date givenDate = df.parse("01/08/2016");
Calendar currentDate = Calendar.getInstance();
if(currentDate.getTime().compareTo(givenDate) > 0) {
currentTime.add(Calendar.DATE, 1);
}
请记住,Date对象表示UTC时区中的当前时间(自epoch以来的秒数)。