Android世界时钟-时间1970-1-1 0:0无法设置的代码调用和原因

时间1970-1-1 0:0无法设置的代码调用和原因

根因:时间设置从0101起始,而非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 TimeGMT)是指位于伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时的时间。由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能和实际的太阳时相差16分钟。地球每天的自转是有些不规则的,而且正在缓慢减速。所以,格林尼治时间已经不再被作为标准时间使用。现在的标准时间——协调世界时(UTC——原子钟提供。192425日开始,格林尼治天文台每隔一小时会向全世界发放调时信息。而UTC是基于标准的GMT提供的准确时间。



相关查阅资料链接:

http://www.iteye.com/problems/10232

http://blog.csdn.net/kunkun378263/article/details/22681733

http://baike.baidu.com/link?url=ii7Z5tY3wTbd3LpqzVkyJPpVmwF6DPkZrhNikgeNYvj1Lw16Flm6FzcPrgqXkpBDlSWvMLWpnMMOrPQUTGBmXq

http://zhidao.baidu.com/link?url=fCj9Fdj9BkRmsM3y6Ru3TI0glI2ONx-FjQjXI3svxs5ss-Y1QJ4zT1ElPL9IWa_pLEJqMzIuzoDVY_pnRy8mlq


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值