时间1970-1-1 0:0无法设置的代码调用和原因
根因:时间设置从01:01起始,而非00:00起始
1. 从界面布局定位到时间设置DateTimeSettings.java
packages/apps/Settings/src/com/android/settings/DateTimeSettings.java
static void setTime(Context context, int hourOfDay, int minute) {
Calendar c = Calendar.getInstance();
c.set(Calendar.HOUR_OF_DAY, hourOfDay);
Log.d("lp","setTime:" + "hourOfDay:" + hourOfDay + "Calendar.HOUR_OF_DAY:" + Calendar.HOUR_OF_DAY);
c.set(Calendar.MINUTE, minute);
Log.d("lp","Calendar.MINUTE:" + Calendar.MINUTE + "minute:" + minute);
c.set(Calendar.SECOND, 0);
Log.d("lp","Calendar.SECOND:" + Calendar.SECOND);
c.set(Calendar.MILLISECOND, 0);
Log.d("lp","Calendar.MILLISECOND:"+Calendar.MILLISECOND);
long when = c.getTimeInMillis();
Log.d("lp","when:" + when + "Integer.MAX_VALUE" + Integer.MAX_VALUE);
if (when / 1000 < Integer.MAX_VALUE) {
((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when);
}
}
Log信息如下:
D/lp ( 6873): onPreferenceTreeClick:
D/lp ( 6873): onTimeSet:
D/lp ( 6873): setTime:hourOfDay:0Calendar.HOUR_OF_DAY:11
D/lp ( 6873): Calendar.MINUTE:12minute:0
D/lp ( 6873): Calendar.SECOND:13
D/lp ( 6873): when:1406764800000Integer.MAX_VALUE2147483647
D/lp ( 6873): onPreferenceTreeClick:
D/lp ( 6873): onTimeSet:
D/lp ( 6873): setTime:hourOfDay:0Calendar.HOUR_OF_DAY:11
D/lp ( 6873): Calendar.MINUTE:12minute:0
D/lp ( 6873): Calendar.SECOND:13
D/lp ( 6873): when:1406761200000Integer.MAX_VALUE2147483647
D/lp ( 6873): onPreferenceTreeClick:
D/lp ( 6873): onTimeSet:
D/lp ( 6873): setTime:hourOfDay:1Calendar.HOUR_OF_DAY:11
D/lp ( 6873): Calendar.MINUTE:12minute:1
D/lp ( 6873): Calendar.SECOND:13
D/lp ( 6873): when:60000Integer.MAX_VALUE2147483647
D/lp ( 6873): onPreferenceTreeClick:
D/lp ( 6873): onTimeSet:
D/lp ( 6873): setTime:hourOfDay:1Calendar.HOUR_OF_DAY:11
D/lp ( 6873): Calendar.MINUTE:12minute:0
D/lp ( 6873): Calendar.SECOND:13
D/lp ( 6873): when:0Integer.MAX_VALUE2147483647
2.frameworks时间设定DatePicker.java
static void configureDatePicker(DatePicker datePicker) {
// The system clock can't represent dates outside this range.
Calendar t = Calendar.getInstance();
t.clear();
t.set(1970, Calendar.JANUARY, 1);
datePicker.setMinDate(t.getTimeInMillis());
t.clear();
t.set(2036, Calendar.DECEMBER, 31);
datePicker.setMaxDate(t.getTimeInMillis());
}
//设置日期时间起始及结束日期
frameworks/base/core/java/android/widget/DatePicker.java
public void setMinDate(long minDate) {
mTempDate.setTimeInMillis(minDate);
if (mTempDate.get(Calendar.YEAR) == mMinDate.get(Calendar.YEAR)
&& mTempDate.get(Calendar.DAY_OF_YEAR) != mMinDate.get(Calendar.DAY_OF_YEAR)) {
return;
}
mMinDate.setTimeInMillis(minDate);
mCalendarView.setMinDate(minDate);
if (mCurrentDate.before(mMinDate)) {
mCurrentDate.setTimeInMillis(mMinDate.getTimeInMillis());
updateCalendarView();
}
updateSpinners();
}
//限定最小及最大日期
3.UTC 和GMT
协调世界时,又称世界统一时间,世界标准时间,国际协调时间。简称UTC。
协调世界时是以原子时秒长为基础,在时刻上尽量接近于世界时的一种时间计量系统。
格林尼治标准时间(Greenwich Mean Time,GMT)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟。地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用。现在的标准时间——协调世界时(UTC)——由原子钟提供。自1924年2月5日开始,格林尼治天文台每隔一小时会向全世界发放调时信息。而UTC是基于标准的GMT提供的准确时间。
相关查阅资料链接:
http://www.iteye.com/problems/10232
http://blog.csdn.net/kunkun378263/article/details/22681733