修改android时间
2018-10-10 11:53:19 u014630142 阅读数 1257

一 : 修改Android系统默认时间

源码路径:frameworks/base/services/java/com/android/server/SystemServer.java
主要变量EARLIEST_SUPPORTED_TIME

    // The earliest supported time.  We pick one day into 1970, to
    // give any timezone code room without going into negative time.
    private static final long EARLIEST_SUPPORTED_TIME = 1514764800000L;//20180101 00:00:00
  •  

通过SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME)设置系统时间,只需要修改EARLIEST_SUPPORTED_TIME变量的值。

    private void run() {
        try {
            traceBeginAndSlog("InitBeforeStartServices");
            // If a device's clock is before 1970 (before 0), a lot of
            // APIs crash dealing with negative numbers, notably
            // java.io.File#setLastModified, so instead we fake it and
            // hope that time from cell towers or NTP fixes it shortly.
            if (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME) {
                Slog.w(TAG, "System clock is before 1970; setting to 1970.");
                SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);
            }
  •  

设置系统默认时间这段代码请放在startOtherServices()之后,否则无效(不同的平台代码略有差别,可以自己评价该放在什么位置)。

        // Start services.
        try {
            traceBeginAndSlog("StartServices");
            startBootstrapServices();
            startCoreServices();
            startOtherServices();
            //add by jasun@180730 for default time start
            if (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME) {
                Slog.w(TAG, "System clock is before 2018.; setting to 2018.");
                SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);
            }
            //add by jasun@180730 for default time end
            SystemServerInitThreadPool.shutdown();
        } catch (Throwable ex) {
            Slog.e("System", "******************************************");
            Slog.e("System", "************ Failure starting system services", ex);
            throw ex;
        } finally {
            traceEnd();
        }
  •  

二 : 时间转换为UNIX时间戳

EARLIEST_SUPPORTED_TIME变量值如何获取?
Linux命令转换时间戳,如下:

$ date +%s --date 19700101 --utc   // 1970-01-01 00:00 UTC
0
$ date +%s --date 20120101 --utc   // 2012-01-01 00:00 UTC
1325376000
$ date +%s --date 20160101 --utc   // 2016-01-01 00:00 UTC
1451606400
  •  

反之,也可以把某个UNIX时间戳转换为具体日期,如下:

$ date --date=@86400 --utc // Android默认EARLIEST_SUPPORTED_TIME值为86400×1000
1970年 01月 02日 星期五 00:00:00 UTC
$ date --date=@1451606400 --utc
2016年 01月 01日 星期五 00:00:00 UTC
$ date --date=@1451606400
2016年 01月 01日 星期五 08:00:00 CST

--------------------- 作者:一莫言一 来源:CSDN 原文:https://blog.csdn.net/ljx646566715/article/details/81189914?utm_source=copy 版权声明:本文为博主原创文章,转载请附上博文链接!

2014-08-03 09:03:30 tfs080640234 阅读数 728

在kernel/arch/arm/configs/*-defconfig文件中的CONFIG_RTC_START_YEAR设置为2014

在/packages/apps/Settings/src/com/sprd/settings/timerpower/Alarms.java中函数 alarm_flag_setup中修改

c.set(2014, 0, 1, 0, 0, 0);

2016-09-03 10:25:45 Mr_kings 阅读数 5109

手机第一次开机默认是没有定制时区的(默认是GMT:+00:00),但是会有一个默认日期,如2013年1月1日。
如何客制化默认时区以及时间呢?
[Solution]
一、修改默认时间
1、修改RTC默认日期:
Android L之前:
\alps\mediatek\custom\[project]\preloader\ inc\cust_rtc.h
\alps\mediatek\custom\[project]\kernel\rtc\rtc\rtc-mt65XX.h
Android L或M:
bootable\bootloader\preloader\custom\[project]\inc\cust_rtc.h
#define RTC_DEFAULT_YEA         2012
#define RTC_DEFAULT_MTH        2
#define RTC_DEFAULT_DOM        1
2、修改默认日期:
framework\services\java\com\android\server\NetworkTimeUpdateService.java
systemReady()
……

 if(isFirstBoot){
   Time today = new Time(Time.getCurrentTimezone());
   today.setToNow();   // 将时间恢复到RTC时间
   today.set(1, 0, mDefaultYear ); //设立出厂默认日期,mDefaultYear是默认年份
如果想恢复出厂设置后,系统时间不变,可使用today.setToNow();
如果想恢复出厂设置后,系统时间也恢复成出厂时间,可使用today.set(1, 0, mDefaultYear );
这个today.set方法有6个参数的重载,可以精确到秒,具体使用方法请自行查询API,所以在这里设置系统默认时间就可以了。
 
如果要設置出廠默認年份需要修改
     1)   mediatek\frameworks\base\res\res\values\config.xml将default_restore_year 修改成 2013
(Android L:vendor\mediatek\proprietary\frameworks\base\res\res\values)
        <!-- default year for first power on-->
       <integer name="default_restore_year">2013</integer>
 
2)frameworks\base\services\java\com\android\server\NetworkTimeUpdateService.java

      today.set(today.monthDay, today.month, 2013);//月份要减一个月才是当前月份 例如20130101 (1,1,2013)
      Log.d(TAG, "Set the year to 2013");
      SystemProperties.set(BOOT_SYS_PROPERTY, "false");
      SystemClock.setCurrentTimeMillis(today.toMillis(false));

 修改后的表现可通过Setting菜单->时间日期设置):

2017-09-23 17:06:34 qilu0882 阅读数 1847

相信很多人看到过Android手机或平板显示XXXX-01-01这个奇怪的日期,没错,这就是Android设备的默认日期。当Android设备没有联网,无法获取当前真实时间的时候,就会使用系统默认时间。大部分时候,系统默认时间是Epoch时间(即1970-01-01 00:00:00 UTC),也有OEM厂商会修改此默认时间。
进入正题,如何修改默认时间呢,很简单,修改SystemServer.java中EARLIEST_SUPPORTED_TIME常量的值。如下:

    private void run() {
        try {
            traceBeginAndSlog("InitBeforeStartServices");    
            // If a device's clock is before 1970 (before 0), a lot of
            // APIs crash dealing with negative numbers, notably
            // java.io.File#setLastModified, so instead we fake it and
            // hope that time from cell towers or NTP fixes it shortly.
            if (System.currentTimeMillis() < EARLIEST_SUPPORTED_TIME) {
                Slog.w(TAG, "System clock is before 1970; setting to 1970.");
                SystemClock.setCurrentTimeMillis(EARLIEST_SUPPORTED_TIME);
            }
        // ......
    }

好了,知道了修改EARLIEST_SUPPORTED_TIME可以改变系统默认时间,还得知道怎么样修改EARLIEST_SUPPORTED_TIME呀。如果我需要把默认时间改为2016-01-01 00:00 UTC,那EARLIEST_SUPPORTED_TIME应该为什么数呢?

EARLIEST_SUPPORTED_TIME表示的是从Epoch开始所经历的毫秒数,回想一下,UNIX时间戳表示的是从Epoch开始所经历的秒数。也就是说,我们只需要把某个具体时间转换为UNIX时间戳,进而就可以转换为EARLIEST_SUPPORTED_TIME值了。

怎么把某个时间转换为UNIX时间戳呢,不少人编程去做,其实大可不必如此麻烦,Linux的date命令就可以完成这个转换。如下:

$ date +%s --date 19700101 --utc   // 1970-01-01 00:00 UTC
0
$ date +%s --date 20120101 --utc   // 2012-01-01 00:00 UTC
1325376000
$ date +%s --date 20160101 --utc   // 2016-01-01 00:00 UTC
1451606400

反之,也可以把某个UNIX时间戳转换为具体日期,如下:

$ date --date=@86400 --utc // Android默认EARLIEST_SUPPORTED_TIME值为86400×1000
19700102日 星期五 00:00:00 UTC
$ date --date=@1451606400 --utc
20160101日 星期五 00:00:00 UTC
$ date --date=@1451606400
20160101日 星期五 08:00:00 CST

注:frameworks/base/services/java/com/android/server/SystemServer.java

2015-04-27 11:59:00 tingyuanss 阅读数 448

用到的关键控件: DatePickerDialog(日期),TimePickerDialog(时间).

代码如下:

1.activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <TextView
        android:id="@+id/dateAndTime"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />
    <Button 
        android:id="@+id/dateBtn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="Set the Date"
        />
    <Button 
        android:id="@+id/timeBtn"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="set the Time"
        />

</LinearLayout>

2.src/MainActivity.java

package com.example.datetime;

import java.text.DateFormat;
import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;
import android.widget.TimePicker;

public class MainActivity extends Activity {

	DateFormat fmtDateAndTime = DateFormat.getDateTimeInstance();
	TextView dateAndTimeLabel;
	Calendar dateAndTime = Calendar.getInstance();
	DatePickerDialog.OnDateSetListener d = new DatePickerDialog.OnDateSetListener() {
		@Override
		public void onDateSet(DatePicker view, int year, int monthOfYear,
				int dayOfMonth) {
			// TODO Auto-generated method stub
			dateAndTime.set(Calendar.YEAR, year);
			dateAndTime.set(Calendar.MONTH, monthOfYear);
			dateAndTime.set(Calendar.DAY_OF_MONTH, dayOfMonth);
			updateLabel();
		}
	};
	
	TimePickerDialog.OnTimeSetListener t = new TimePickerDialog.OnTimeSetListener() {
		
		@Override
		public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
			// TODO Auto-generated method stub
			dateAndTime.set(Calendar.HOUR_OF_DAY, hourOfDay);
			dateAndTime.set(Calendar.MINUTE, minute);
			updateLabel();
		}
	};
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		Button btn = (Button)findViewById(R.id.dateBtn);
		btn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new DatePickerDialog(MainActivity.this, d, 
						dateAndTime.get(Calendar.YEAR),
						dateAndTime.get(Calendar.MONTH),
						dateAndTime.get(Calendar.DAY_OF_MONTH)).show();
			}
		});
		
		Button tBtn = (Button)findViewById(R.id.timeBtn);
		tBtn.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				new TimePickerDialog(MainActivity.this, t,
						dateAndTime.get(Calendar.HOUR_OF_DAY),
						dateAndTime.get(Calendar.MINUTE),
						true).show();
			}
		});
		
		dateAndTimeLabel = (TextView)findViewById(R.id.dateAndTime);
		updateLabel();
	}
	
	private void updateLabel(){
		dateAndTimeLabel.setText(fmtDateAndTime.format(dateAndTime.getTime()));
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}
}
运行结果截图:




没有更多推荐了,返回首页