如何设置timezone-android timezone开发问答

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
您的访问请求被拒绝 403 Forbidden - ITeye技术社区
您的访问请求被拒绝
亲爱的会员,您的IP地址所在网段被ITeye拒绝服务,这可能是以下两种情况导致:
一、您所在的网段内有网络爬虫大量抓取ITeye网页,为保证其他人流畅的访问ITeye,该网段被ITeye拒绝
二、您通过某个代理服务器访问ITeye网站,该代理服务器被网络爬虫利用,大量抓取ITeye网页
请您点击按钮解除封锁&android开发(36)
在开发android系统设置的过程中会涉及许多内容。其中很简单的时区设定就包含很多内容。前面分析的设置时间自动同步的相关内容,下面接着分析一下系统中时区设定的相关内容。
以Android 5.1.1 LMY48M这个版本为例说明:
在时区设定里会调用到Settings\src\com\android\settings\ZonePicker.java这个文件其中:
public void onListItemClick(ListView listView, View v, int position, long id) {
if (!isResumed()) return;
final Map&?, ?& map = (Map&?, ?&)listView.getItemAtPosition(position);
final String tzId = (String) map.get(KEY_ID);
final Activity activity = getActivity();
final AlarmManager alarm = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
alarm.setTimeZone(tzId);
final TimeZone tz = TimeZone.getTimeZone(tzId);
if (mListener != null) {
mListener.onZoneSelected(tz);
getActivity().onBackPressed();
完成了时区的设定,这么看来完成这件事情的是AlarmManager这个类,为了知其然更要知其所以然我们继续跟进AlarmManager
* Set the system default time zone.
* Requires the permission android.permission.SET_TIME_ZONE.
* timeZone in the format understood by {@link java.util.TimeZone}
public void setTimeZone(String timeZone) {
mService.setTimeZone(timeZone);
} catch (RemoteException ex) {
可见AlarmManager也是调用AlarmManagerService.java这个来实现的,继续跟进,在这个服务中
public void setTimeZone(String tz) {
mContext.enforceCallingOrSelfPermission(
"android.permission.SET_TIME_ZONE",
"setTimeZone");
long oldId = Binder.clearCallingIdentity();
if (TextUtils.isEmpty(tz)) return;
TimeZone zone = TimeZone.getTimeZone(tz);
boolean timeZoneWasChanged = false;
synchronized (this) {
String current = SystemProperties.get(TIMEZONE_PROPERTY);
if (current == null || !current.equals(zone.getID())) {
if (localLOGV) {
Slog.v(TAG, "timezone changed: " + current + ", new=" + zone.getID());
timeZoneWasChanged = true;
SystemProperties.set(TIMEZONE_PROPERTY, zone.getID());
int gmtOffset = zone.getOffset(System.currentTimeMillis());
setKernelTimezone(mDescriptor, -(gmtOffset / 60000));
TimeZone.setDefault(null);
if (timeZoneWasChanged) {
Intent intent = new Intent(Intent.ACTION_TIMEZONE_CHANGED);
intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING);
intent.putExtra("time-zone", zone.getID());
mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
} finally {
Binder.restoreCallingIdentity(oldId);
其中 SystemProperties.set(TIMEZONE_PROPERTY, zone.getID());是实现问题的关键。我们继续查看SystemProperties.java这个文件,其中
private static native String native_get(String key);
private static native String native_get(String key, String def);
private static native int native_get_int(String key, int def);
private static native long native_get_long(String key, long def);
private static native boolean native_get_boolean(String key, boolean def);
private static native void native_set(String key, String def);
private static native void native_add_change_callback();
* Set the value for the given key.
* IllegalArgumentException if the key exceeds 32 characters
* IllegalArgumentException if the value exceeds 92 characters
public static void set(String key, String val) {
if (key.length() & PROP_NAME_MAX) {
throw new IllegalArgumentException("key.length & " + PROP_NAME_MAX);
if (val != null && val.length() & PROP_VALUE_MAX) {
throw new IllegalArgumentException("val.length & " +
PROP_VALUE_MAX);
native_set(key, val);
这就开始通过jni调到c 、cpp的代码了。在master/core/jni/android_os_SystemProperties.cpp中
static JNINativeMethod method_table[] = {
{ "native_get", "(Ljava/lang/S)Ljava/lang/S",
(void*) SystemProperties_getS },
{ "native_get", "(Ljava/lang/SLjava/lang/S)Ljava/lang/S",
(void*) SystemProperties_getSS },
{ "native_get_int", "(Ljava/lang/SI)I",
(void*) SystemProperties_get_int },
{ "native_get_long", "(Ljava/lang/SJ)J",
(void*) SystemProperties_get_long },
{ "native_get_boolean", "(Ljava/lang/SZ)Z",
(void*) SystemProperties_get_boolean },
{ "native_set", "(Ljava/lang/SLjava/lang/S)V",
(void*) SystemProperties_set },
static void SystemProperties_set(JNIEnv *env, jobject clazz,
jstring keyJ, jstring valJ)
const char*
const char*
if (keyJ == NULL) {
jniThrowNullPointerException(env, "key must not be null.");
key = env-&GetStringUTFChars(keyJ, NULL);
if (valJ == NULL) {
val = env-&GetStringUTFChars(valJ, NULL);
err = property_set(key, val);
env-&ReleaseStringUTFChars(keyJ, key);
if (valJ != NULL) {
env-&ReleaseStringUTFChars(valJ, val);
if (err & 0) {
jniThrowException(env, "java/lang/RuntimeException",
"failed to set system property");
err = property_set(key, val);这行代码是真正实现该功能的。进去继续查看。这代码声明在#include “cutils/properties.h”这个文件中。在说下面的代码逻辑之前先再说一点关于宏的一些概念。众所周知c语言中不存在重载的概念,更不能在同一个文件中同时定义同名的函数,为了实现这个功能源码中通过 宏来指定不同条件下的编译选择。所以在 properties.c的代码中存在多份property_set。控制具体编译那个的宏是在/build/core/combo/include/arch 下面的某个AndroidConfig.h文件其中就有HAVE_LIBC_SYSTEM_PROPERTIES的定义,但是其中注意这个和在编译系统时候选择的编译版本有关系,如果是darwin-x86或者windows下面的文件就没有这个定义。其实现就是另外一套逻辑了。就我手机里的系统当时的编译选项而说的话是包含这个定义的。所以
#ifdef HAVE_LIBC_SYSTEM_PROPERTIES
#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_
#include &sys/_system_properties.h&
int property_set(const char *key, const char *value)
return __system_property_set(key, value);
其中在libc/bionic/system_properties.cpp
int __system_property_set(const char *key, const char *value)
if (key == 0) return -1;
if (value == 0) value = "";
if (strlen(key) &= PROP_NAME_MAX) return -1;
if (strlen(value) &= PROP_VALUE_MAX) return -1;
memset(&msg, 0, sizeof msg);
msg.cmd = PROP_MSG_SETPROP;
strlcpy(msg.name, key, sizeof msg.name);
strlcpy(msg.value, value, sizeof msg.value);
const int err = send_prop_msg(&msg);
if (err & 0) {
static int send_prop_msg(const prop_msg *msg)
const int fd = socket(AF_LOCAL, SOCK_STREAM | SOCK_CLOEXEC, 0);
if (fd == -1) {
return -1;
const size_t namelen = strlen(property_service_socket);
memset(&addr, 0, sizeof(addr));
strlcpy(addr.sun_path, property_service_socket, sizeof(addr.sun_path));
addr.sun_family = AF_LOCAL;
socklen_t alen = namelen + offsetof(sockaddr_un, sun_path) + 1;
if (TEMP_FAILURE_RETRY(connect(fd, reinterpret_cast&sockaddr*&(&addr), alen)) & 0) {
close(fd);
return -1;
const int num_bytes = TEMP_FAILURE_RETRY(send(fd, msg, sizeof(prop_msg), 0));
int result = -1;
if (num_bytes == sizeof(prop_msg)) {
pollfd pollfds[1];
pollfds[0].fd =
pollfds[0].events = 0;
const int poll_result = TEMP_FAILURE_RETRY(poll(pollfds, 1, 250 ));
if (poll_result == 1 && (pollfds[0].revents & POLLHUP) != 0) {
result = 0;
result = 0;
close(fd);
其中send_prop_msg是发消息给property_service.c,这个文件是整个过程的终结点。在这个类中会将数据写入/data/property这个目录下有 persist.sys.timezone 这个文件中
ok整个过程分析完了,至于为什么用socket通信到property_service,请看老罗的:
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:37861次
排名:千里之外
原创:20篇
转载:20篇
(2)(2)(5)(3)(1)(2)(1)(1)(2)(2)(1)(1)(3)(2)(3)(9)(4)Java中的TimeZone夏令时问题解决_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Java中的TimeZone夏令时问题解决
来源:Linux社区&
作者:kongxx
在Linux上使用system-config-date工具来设置了一个TimeZone之后(设置的结果会被记录在/etc/sysconfig/clock文件中),在进出夏令时的时候Java中取的时间不能跟着夏令时的时钟变化,从而导致Java中的系统时间出现混乱。
我们写了一个小程序用来获取当前机器上的TimeZone信息,以及打印一些时间看看进/出夏令时的时候时间的变化。
import java.text.SimpleDateFimport java.util.Cimport java.util.TimeZ&public class TimeZoneTest {& & public static void main(String[] args) {& & & & TimeZone tz = TimeZone.getDefault();& & & & System.out.println("tz: " + tz);& & & &
& & & & int offset = tz.getRawOffset();& & & & System.out.println("raw offset: " + offset);& & & &
& & & & int dstSavings = tz.getDSTSavings();& & & & System.out.println("dstSavings: " + dstSavings);& & & &
& & & & SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");& & & & while(true) {& & & & & & Calendar cal = Calendar.getInstance();& & & & & & String msg = "[" + sdf.format(cal.getTime()) + "] " + cal.getTime();& & & & & & msg += ", offset: " + TimeZone.getDefault().getOffset(cal.getTimeInMillis());& & & & & & System.out.println(msg);& & & & & &
& & & & & & try {& & & & & & & & Thread.sleep(60 * 1000);& & & & & & } catch (InterruptedException ex) {& & & & & & & & ex.printStackTrace();& & & & & & }& & & & }& & }}
下面两个正确的Case是在设置了TimeZone为&America/Los_Angeles&的情况下运行的结果
Case 1: 设置系统时间为 01:59:00 AM
tz: sun.util.calendar.ZoneInfo[id="&STRONG&America/Los_Angeles&/STRONG&",offset=-,dstSavings=3600000,&STRONG&useDaylight=true&/STRONG&,transitions=185,lastRule=java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]raw offset: -&STRONG&dstSavings: 3600000&/STRONG&[&STRONG& 01:59:03&/STRONG&] Sun Mar 09 01:59:03 PST 2014, offset: -[&STRONG& 03:00:03&/STRONG&] Sun Mar 09 03:00:03 PDT 2014, offset: -[ 03:01:03] Sun Mar 09 03:01:03 PDT 2014, offset: -
Case 2: 设置系统时间为 12:59:00 AM
tz: sun.util.calendar.ZoneInfo[id="&STRONG&America/Los_Angeles&/STRONG&",offset=-,dstSavings=3600000,&STRONG&useDaylight=true&/STRONG&,transitions=185,lastRule=java.util.SimpleTimeZone[id=America/Los_Angeles,offset=-,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]raw offset: -&STRONG&dstSavings: 3600000&/STRONG&[&STRONG& 01:59:32&/STRONG&] Sun Nov 02 01:59:32 PDT 2014, offset: -[&STRONG& 01:00:32&/STRONG&] Sun Nov 02 01:00:32 PST 2014, offset: -[ 01:01:32] Sun Nov 02 01:01:32 PST 2014, offset: -
Case 3: 设置TimeZone为&America/North_Dakota/Center&,设置系统时间为 01:59:00 AM,再运行上面的程序发现
tz: sun.util.calendar.ZoneInfo[id="&STRONG&GMT-06:00&/STRONG&",offset=-,&STRONG&dstSavings=0,useDaylight=false&/STRONG&,transitions=0,lastRule=null]raw offset: -&STRONG&dstSavings: 0&/STRONG&[&STRONG& 01:59:12&/STRONG&] Sun Mar 09 01:59:12 GMT-06:00 2014, offset: -, loader start date: Sun Mar 09 01:59:00 GMT-06:00 2014[&STRONG& 02:00:12&/STRONG&] Sun Mar 09 02:00:12 GMT-06:00 2014, offset: -, loader start date: Sun Mar 09 02:00:00 GMT-06:00 2014[ 02:01:12] Sun Mar 09 02:01:12 GMT-06:00 2014, offset: -, loader start date: Sun Mar 09 02:01:00 GMT-06:00 2014
从结果中可以看到TimeZone ID=GMT-06:00, dstSavings=0,并且在时间从1:59变到2:00的时候时间并没有向后调整到3:00 ,这说明Java没有找到对应的时区信息(也许这是Java的一个bug),所以Java就不知道当前这个时区是不是使用了夏令时,所以最终导致取得的时间不对。
对于这类问题,可以通过下面两个方法解决
1. 使用TZ环境变量,然后在运行Java程序
$ export TZ=America/North_Dakota/Center
$ java TimeZoneTest
2. 使用-Duser.timezone=America/North_Dakota/Center作为Java虚拟机的系统参数
java -Duser.timezone=America/North_Dakota/Center TimeZoneTest
另外,可以通过下面的一些命令查看系统的timezone信息
cat /usr/share/zoneinfo/zone.tabzdump /usr/share/zoneinfo/*zdump -v /usr/share/zoneinfo/America/New_York 查看夏令时时间变化点zdump -v /etc/localtimetz_convert /usr/share/zoneinfo/sudo cat /etc/sysconfig/clock
本文永久更新链接地址:
相关资讯 & & &
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款Android MTK开发时区修改_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Android MTK开发时区修改
上传于||暂无简介
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩7页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢Android中关于日期时间与时区的使用总结
 在开发的过程中,出现过几次由于日期时间导致的问题,而且主要是由于时区的原因导致,所以一直想总结一下,形成一个良好的开发规范。
一、Unix时间戳
  Unix时间戳(Unix timestamp),或称Unix时间(Unix time)、POSIX时间(POSIX time),是一种时间表示方法,定义为从格林威治时间日00时00分00秒起至现在的总秒数。Unix时间戳不仅被使用在Unix、类Unix系统中,也在许多其他操作系统中被广泛采用。
二、关于时间标准和时区
  1、原子时:International Atomic Time (IAT)
    又称国际原子时,是一种通过原子钟得到的时间标准,原子钟是世界上已知最准确的时间测量和频率标准,原子钟在 37 亿年的误差不超过 1 秒。
  2、世界时:Universal Time(UT)
    是一种以格林尼治子夜起算的平太阳时。世界时是以地球自转为基准得到的时间尺度,其精度受到地球自转不均匀变化和极移的影响,为了解决这种影响,1955年国际天文联合会定义了UT0、UT1和UT2三个系统,他们三者之间是递进的关系,后者都是发现前者的一些度量差别,通过修正得到更均匀的时标。
    在格林尼治子午线上的平太阳时称为世界时(UT0),又叫格林尼治平时(GMT)。格林尼治标准时间(旧译格林尼治平均时间或格林威治标准时间,英语:Greenwich Mean Time,GMT)是指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。自日开始,格林尼治天文台每隔一小时会向全世界发放调时信息。
  2、协调世界时:Coordinated Universal Time(UTC)
    又称世界标准时间、世界统一时间。是经过平均太阳时(以格林威治时间GMT为准)、地轴运动修正后的新时标以及以&秒&为单位的国际原子时所综合精算而成的时间,计算过程相当严谨精密,因此若以&世界标准时间&的角度来说,UTC比GMT更精准。其误差值必须保持在0.9秒以内,若大于0.9秒则由位于巴黎的国际地球自转事务中央局发布闰秒,使UTC与地球自转周期一致。
    基本上UTC的本质强调的是比GMT更精确的世界时间标准,UTC中多一个闰秒的调整,以确保协调世界时(UTC)与格林尼治平时(GMT)相差不会超过0.9秒,并在有需要的时候在协调世界时(UTC)内加上正或负闰秒。
    UTC被应用在大多数的计算机以及网络标准中。
  3、夏令时与冬令时:Daylight Saving Time(DST)
    又称&日光节约时制&和&夏令时间&,是一种为节约能源而人为规定地方时间的制度,在这一制度实行期间所采用的统一时间称为&夏令时间&。一般在天亮早的夏季人为将时间提前一小时,可以使人早起早睡,减少照明量,以充分利用光照资源,从而节约照明用电。各个采纳夏时制的国家具体规定不同。目前全世界有近110个国家每年要实行夏令时。自日开始俄罗斯永久使用夏令时,把时间拨快一小时,不再调回。
    简单来说,使用夏令时和冬令时即在夏季将时间拨快一个小时,等到冬季再将时间拨慢一个小时。
  4、CST
    CST同时代表澳大利亚、美国、中国、古巴四个国家的标准时间,时区分别为:
     澳洲中部时间,Central Standard Time (Australia) UT+9:30
     中部标准时区(北美洲),Central Standard Time (North America) UT-6:00
     北京时间,China Standard Time UT+8:00
     古巴标准时间,Cuba Standard Time UT-4:00
  在开发时我们需要注意不同国家的时区,并且UTC和GMT在计算机系统中使用并无明显差别,可视为等同。
  在实际开发中,当时间用于显示时,非特殊要求下一般使用系统默认的时区时间作为显示时间。将时间做为数据存储或传递给其他系统时(特别是跨平台调用),则最好使用标准的UTC/GMT时间(后面统称GMT),除非事先约定或标识了时间的类型。
三、在Android中需要特别注意的事项
  1、Android中表示日期时间的类型,有Date、Calendar,他们在没有显示设置其时区时,取到的当前时间均为系统默认时区的时间,即使给定一个时间,同样是按系统默认时区来换算时间,所以说他们都是与时区相关的。
  2、SimpleDateFormat对象本身也是跟时区相关。
    当使用parse将一个字符串格式的日期转换为Date对象,或者将一个Date对象转换为字符串日期时,这个字符串日期的时区以SimpleDateFormat关联的时区为准,如果通过setTimeZone修改了时区,则这个字符串日期以修改后的时区为准。例如:
Date date = new Date(0L);
System.out.println(date);
String dateStr = & 22:17:14&;
SimpleDateFormat dateFormat = new SimpleDateFormat(&yyyy-MM-dd HH:mm:ss&);
dateFormat.setTimeZone(TimeZone.getTimeZone(&GMT&));
& & // 对于已经设定为GMT时间标准的dateFormat来说,一切需要他转换的字符串日期都是GMT标准时间,转换后返回的Date由于默认遵守系统默认时区,所以转换给Date的日期需要+8(例如北京标准时区),也就是时区与标准不同导致的时差。
& & Date dateTmp = dateFormat.parse(dateStr);
& & System.out.println(dateTmp);
catch (ParseException e)&
& & e.printStackTrace(); &
// Date还是按系统默认时区,而format格式化处来的字符串是GMT,所以要-8。
String dateStrTmp = dateFormat.format(date); &
System.out.println(dateStrTmp);
    输出结果为:image
  3、Calendar在不手动设置时区时,是与系统默认时区相关的。在手动修改时区后,不能使用calendar.getTime方法来直接获取Date日期,因为此时的日期与setTime时的值相同,想要正确获取修改时区后的时间,应该通过calendar的get方法。例如:
Date date = new Date(0L);
System.out.println(date);
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(TimeZone.getTimeZone(&GMT&)); &
// 或者可以 Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone(&GMT&)); &
calendar.setTime(date);
System.out.println(calendar.get(Calendar.HOUR_OF_DAY) + &:& + calendar.get(Calendar.MINUTE));
Calendar calendar2 = Calendar.getInstance(); &
calendar2.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND));
System.out.println(calendar.getTime()); &
System.out.println(calendar2.getTime());
    输入结果为:image
  4、TimeZone
    在开发中,我们可以通过TimeZone对象获取关于系统默认时区及其相关的详细信息。
四、Android关于日期的工具类
&* Copyright (C) 2011, BHJ
&* All rights reserved.
&* 文件名称:
&* 文件标识:
&* 文件摘要:
&* 当前版本:
&* 作 & &者:
&* 完成日期:
&* 取代版本:
&* 修改时间:
&* 修 改 人:
&* 修改摘要:
package com.bhj.
import java.text.ParseE
import java.text.SimpleDateF
import java.util.C
import java.util.D
import java.util.TimeZ
&* 日期工具类(未特别说明的均为系统默认时区下的时间)
public class DateUtil
& & /** 1s==1000ms */
& & private final static int TIME_MILLISECONDS = 1000;
& & /** 时间中的分、秒最大值均为60 */
& & private final static int TIME_NUMBERS = 60;
& & /** 时间中的小时最大值 */
& & private final static int TIME_HOURSES = 24;
& & /** 格式化日期的标准字符串 */
& & private final static String FORMAT = &yyyy-MM-dd HH:mm:ss&;
& & &* 获取时区信息
& & public static TimeZone getTimeZone()
& & & & return TimeZone.getDefault();
& & &* 将日期字符串转换为Date对象
& & &* @param date 日期字符串,必须为&yyyy-MM-dd HH:mm:ss&
& & &* @return 日期字符串的Date对象表达形式
& & public static Date parseDate(String date)
& & & & return parseDate(date, FORMAT);
& & &* 将日期字符串转换为Date对象
& & &* @param date 日期字符串,必须为&yyyy-MM-dd HH:mm:ss&
& & &* @param format 格式化字符串
& & &* @return 日期字符串的Date对象表达形式
& & public static Date parseDate(String date, String format)
& & & & Date dt =
& & & & SimpleDateFormat dateFormat = new SimpleDateFormat(format);
& & & & try
& & & & & & dt = dateFormat.parse(date);
& & & & catch(ParseException e)
& & & & & & e.printStackTrace();
& & &* 将Date对象转换为指定格式的字符串
& & &* @param date Date对象
& & &* @return Date对象的字符串表达形式&yyyy-MM-dd HH:mm:ss&
& & public static String formatDate(Date date)
& & & & return formatDate(date, FORMAT); &
& & &* 将Date对象转换为指定格式的字符串
& & &* @param date Date对象
& & &* @param String format 格式化字符串
& & &* @return Date对象的字符串表达形式
& & public static String formatDate(Date date, String format)
& & & & SimpleDateFormat dateFormat = new SimpleDateFormat(format); &
& & & & return dateFormat.format(date); &
& & &* 格式化日期
& & &* @param long unixTime unix时间戳
& & &* @return 日期字符串&yyyy-MM-dd HH:mm:ss&
& & public static String formatUnixTime(long unixTime)
& & & & return formatUnixTime(unixTime, FORMAT);
& & &* 格式化日期
& & &* @param long unixTime unix时间戳
& & &* @param String format 格式化字符串
& & &* @return 日期字符串
& & public static String formatUnixTime(long unixTime, String format)
& & & & SimpleDateFormat dateFormat = new SimpleDateFormat(format); &
& & & & return dateFormat.format(unixTime); &
& & &* 将GMT日期格式化为系统默认时区的日期字符串表达形式
& & &* @param gmtUnixTime GTM时间戳
& & &* @return 日期字符串&yyyy-MM-dd HH:mm:ss&
& & public static String formatGMTUnixTime(long gmtUnixTime)
& & & & return formatGMTUnixTime(gmtUnixTime, FORMAT);&
& & &* 将GMT日期格式化为系统默认时区的日期字符串表达形式
& & &* @param gmtUnixTime GTM时间戳
& & &* @param format 格式化字符串
& & &* @return 日期字符串&yyyy-MM-dd HH:mm:ss&
& & public static String formatGMTUnixTime(long gmtUnixTime, String format)
& & & & SimpleDateFormat dateFormat = new SimpleDateFormat(format);
& & & & return dateFormat.format(gmtUnixTime + TimeZone.getDefault().getRawOffset());&
& & &* 获取时间戳的Date表示形式
& & &* @param unixTime unix时间戳
& & &* @return Date对象
& & public static Date getDate(long unixTime)
& & & & return new Date(unixTime); &
& & &* 获取GMT时间戳的Date表示形式(转换为Date表示形式后,为系统默认时区下的时间)
& & &* @param gmtUnixTime GMT Unix时间戳
& & &* @return Date对象
& & public static Date getGMTDate(long gmtUnixTime)
& & & & return new Date(gmtUnixTime + TimeZone.getDefault().getRawOffset());&
& & &* 将系统默认时区的Unix时间戳转换为GMT Unix时间戳
& & &* @param unixTime unix时间戳
& & &* @return GMT Unix时间戳
& & public static long getGMTUnixTime(long unixTime)
& & & & return unixTime - TimeZone.getDefault().getRawOffset();
& & &* 将GMT Unix时间戳转换为系统默认时区的Unix时间戳
& & &* @param gmtUnixTime GMT Unix时间戳
& & &* @return 系统默认时区的Unix时间戳
& & public static long getCurrentTimeZoneUnixTime(long gmtUnixTime)
& & & & return gmtUnixTime + TimeZone.getDefault().getRawOffset();
& & &* 获取当前时间的GMT Unix时间戳
& & &* @return 当前的GMT Unix时间戳
& & public static long getGMTUnixTimeByCalendar()
& & & & Calendar calendar = Calendar.getInstance();
& & & & // 获取当前时区下日期时间对应的时间戳
& & & & long unixTime = calendar.getTimeInMillis();
& & & & // 获取标准格林尼治时间下日期时间对应的时间戳&
& & & & long unixTimeGMT = unixTime - TimeZone.getDefault().getRawOffset();
& & & & return unixTimeGMT;
& & &* 获取当前时间的Unix时间戳
& & &* @return 当前的Unix时间戳
& & public static long getUnixTimeByCalendar()
& & & & Calendar calendar = Calendar.getInstance();
& & & & // 获取当前时区下日期时间对应的时间戳
& & & & long unixTime = calendar.getTimeInMillis();
& & & & return unixT
& & &* 获取更改时区后的时间&
& & &* @param date 时间&
& & &* @param oldZone 旧时区&
& & &* @param newZone 新时区&
& & &* @return 时间
& & public static Date changeTimeZone(Date date, TimeZone oldZone, TimeZone newZone)&
& & & & Date dateTmp =
& & & & if (date != null)
& & & & & & int timeOffset = oldZone.getRawOffset() - newZone.getRawOffset();
& & & & & & dateTmp = new Date(date.getTime() - timeOffset);
& & & & return dateT
& & &* 将总秒数转换为时分秒表达形式
& & &* @param seconds 任意秒数
& & &* @return %s小时%s分%s秒
& & public static String formatTime(long seconds)
& & & & long hh = seconds / TIME_NUMBERS / TIME_NUMBERS;
& & & & long mm = (seconds - hh * TIME_NUMBERS * TIME_NUMBERS) & 0 ? (seconds - hh * TIME_NUMBERS * TIME_NUMBERS) / TIME_NUMBERS : 0;
& & & & long ss = seconds & TIME_NUMBERS ? seconds : seconds % TIME_NUMBERS;
& & & & return & & (hh == 0 ? && : (hh & 10 ? &0& + hh : hh) + &小时&)&
& & & & & & & & + (mm == 0 ? && : (mm & 10 ? &0& + mm : mm) + &分&)&
& & & & & & & & + (ss == 0 ? && : (ss & 10 ? &0& + ss : ss) + &秒&);
& & &* 获取当前时间距离指定日期时差的大致表达形式
& & &* @param long date 日期
& & &* @return 时差的大致表达形式
& & public static String getDiffTime(long date)
& & & & String strTime = &很久很久以前&;
& & & & long time = Math.abs(new Date().getTime() - date);
& & & & // 一分钟以内
& & & & if(time & TIME_NUMBERS * TIME_MILLISECONDS)
& & & & & & strTime = &刚刚&;
& & & & else
& & & & & & int min = (int)(time / TIME_MILLISECONDS / TIME_NUMBERS);
& & & & & & if(min & TIME_NUMBERS)
& & & & & & {
& & & & & & & & if(min & 15)
& & & & & & & & {
& & & & & & & & & & strTime = &一刻钟前&;
& & & & & & & & }
& & & & & & & & else if(min & 30)
& & & & & & & & {
& & & & & & & & & & strTime = &半小时前&;
& & & & & & & & }
& & & & & & & & else
& & & & & & & & {
& & & & & & & & & & strTime = &1小时前&;
& & & & & & & & }
& & & & & & }
& & & & & & else
& & & & & & {
& & & & & & & & int hh = min / TIME_NUMBERS;
& & & & & & & & if(hh & TIME_HOURSES)
& & & & & & & & {
& & & & & & & & & & strTime = hh + &小时前&;
& & & & & & & & }
& & & & & & & & else
& & & & & & & & {
& & & & & & & & & & int days = hh / TIME_HOURSES;
& & & & & & & & & & if(days &= 6)
& & & & & & & & & & {
& & & & & & & & & & & & strTime = days + &天前&;
& & & & & & & & & & }
& & & & & & & & & & else
& & & & & & & & & & {
& & & & & & & & & & & & int weeks = days / 7;
& & & & & & & & & & & & if(weeks & 3)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & strTime = weeks + &周前&; & &
& & & & & & & & & & & & }
& & & & & & & & & & }
& & & & & & & & }
& & & & & & }
& & & & return strT
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'

我要回帖

更多关于 android开发设置全屏 的文章

 

随机推荐