全,
在办公室里度过了艰难的一天...我正在尝试计算当地时间的一天的开始,即午夜00:00:00,给定任何日历日期。
给定以下几天,我想在当地时间午夜计算一天的开始:
Time Start Day (Local) Start Day (GMT)
2011-03-27 00:00:00 GMT --> 2011-03-27 00:00:00 GMT --> 2011-03-27 00:00:00 GMT
2011-03-27 01:00:00 GMT --> 2011-03-27 00:00:00 GMT --> 2011-03-27 00:00:00 GMT
2011-03-27 02:00:00 GMT --> 2011-03-27 00:00:00 GMT --> 2011-03-27 00:00:00 GMT
2011-04-01 00:00:00 BST --> 2011-04-01 00:00:00 BST --> 2011-03-31 23:00:00 GMT
2011-10-30 00:00:00 BST --> 2011-10-30 00:00:00 BST --> 2011-10-29 23:00:00 GMT
2011-10-30 01:00:00 BST --> 2011-10-30 00:00:00 BST --> 2011-10-29 23:00:00 GMT
2011-10-30 01:00:00 GMT --> 2011-10-30 00:00:00 BST --> 2011-10-29 23:00:00 GMT
2011-11-01 00:00:00 GMT --> 2011-11-01 00:00:00 GMT --> 2011-11-01 00:00:00 GMT目前,我正在使用SimpleDateFormat将字符串Time解析为GregorianCalendar。这为我提供了GMT/UTC时间来进行计算。
因此,我有一些代码可以将字符串解析为GregorianCalendar:
public GregorianCalendar getCalendar(String dateTime) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
GregorianCalendar cal = new GregorianCalendar();
cal.setTime(sdf.parse(dateTime, new ParsePosition(0)));
return cal;
}现在我需要在本地将其设置为午夜:
public void setToStartOfDayLocally(GregorianCalendar cal) {
????
}我不太确定我现在需要用日历做什么。不幸的是,我们不会在不久的将来转向JODA date。我的例子也没有考虑到不同的时区。
有什么想法吗?
谢谢,
Andez
发布于 2011-09-28 23:43:10
听起来你只是想把所有的时间部分都设置为零。您可以使用:
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);(假设您已经在日历中正确设置了时区。)
请注意,这不一定是有效的-在某些时区(例如巴西),在夏令时转换时,午夜要么发生两次,要么根本不发生。
但就我个人而言,我开始大声疾呼要迁移到Joda Time,这会让这一切变得简单得多:)
https://stackoverflow.com/questions/7585745
复制相似问题