Java按照某一时区格式化时间

        好久没写博客,下边先说下笔者写这篇博客的目的吧,前段时间做了一个周期性定时开关机的模块,关机和开机是独立运行的,做这块遇到了好多问题,所以在这和大家分享一下。
	关机思路:听到定时关机第一反应就是他是一个定时任务,需要AlarmManager来完成,于是笔者就开始垒代码,完事之后发现设置的AlarmManager在设备重启之后给设定的定时任务将不复存在,笔者一怒之下就,写了一个service,在这个service的onStartCommand方法中笔者写了一个定时器,这个定时器50秒会执行一次,在定时器的run方法里边new了一个线程,线程里边获取当前的系统时间和activity中用户设置的时间去做对比,如果时间到了则执行关机。(只是一个大概的思路)
	开机思路:android定时开机的实现真不简单,首先需要了解RTC时钟的概念,要懂C 要懂android的底层和framework以及JNI和调用和ubantu编译android源码,于是乎作者先写了个定时开机的demo,获取RTC时间这个ok,设置RTC时间这个也ok,设置RTC开机闹钟这个也ok,不过后来在工程调用中笔者发现RTC时间永远都是按照00时区去配置的,而系统时间会根据所在时区的变化而变化的。接下来笔者就写了个根据所提供时间算出00时区的时间的方法:
		//声明一天时间的总毫秒数
		long onDay = 1000 * 60 * 60 * 24L;
		//声明天数的间隔
		int weekDay = 1;
		//获取当前系统时间的毫秒数
		long cuttTime = System.currentTimeMillis();
		//获取间隔天数的毫秒数
		long targetTime = cuttTime + onDay * weekDay;
		
		try {
			//声明format对象
			SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			//将几天后的现在时间   格式化
			String openDate = f.format(new Date(targetTime));
			//打印格式化后的时间
			System.out.println(openDate);
			//将字符串转转换成Date类型
			Date d = (Date) f.parseObject(openDate);
			//声明时区为00时区
			int timeZoneOffset = 0;
			//声明时区对象
			TimeZone timeZone;
			//返回一个包含符合条件的时区ID的字符串数组
			String[] ids = TimeZone.getAvailableIDs(timeZoneOffset * 60 * 60 * 1000);
			//如果时区编号的长度等于0
			if (ids.length == 0) {
				//获取默认时区
				timeZone = TimeZone.getDefault();
			} else {
				//设置ids中返回的时区
				timeZone = new SimpleTimeZone(timeZoneOffset * 60 * 60 * 1000,ids[0]);
			}
			//给format对象设置时区
			f.setTimeZone(timeZone);
			//格式化date
			f.format(d);
			//打印按照新时区格式化后的时间
			System.out.println(f.format(d));
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	输出结果:2015-11-29 15:59:05
	输出结果:2015-11-29 07:59:05
	这样就讲时间格式化为00时区的格式显示了,之后通过监听android的关机广播去配置用户设置的时间就ok了,当然用户非法关机是收不到关机广播的。


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值