Java按照某一时区格式化时间
2015-11-28 14:52
549 查看
好久没写博客,下边先说下笔者写这篇博客的目的吧,前段时间做了一个周期性定时开关机的模块,关机和开机是独立运行的,做这块遇到了好多问题,所以在这和大家分享一下。
关机思路:听到定时关机第一反应就是他是一个定时任务,需要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了,当然用户非法关机是收不到关机广播的。
[/code]
相关文章推荐
- 对RmiJdbc的二次开发
- Java模拟HTTP的Get和Post请求
- Myeclipse2014黑色主题风格设置
- Java 字符串全面解析
- JAVA通过JDBC连接MySQL数据库提示连接拒绝问题处理
- VS,eclipse联调jni代码
- MyEclipse 使用快捷键
- Eclipse工具使用问题汇总
- Java锁(一)之内存模型
- java实现文件单词频率统计 topN top K
- SpringMVC中HandlerMethod的请求参数解析过程
- 【Java小项目】电子音效器
- java实现网上下载文件到本地
- Struts2类型转换器
- Struts2类型转换器
- Java基础知识总结(我常犯的错误)
- JAVA多线程--信号量(Semaphore)
- JAVA中socket编程println()和 write()方法
- Java使用Jacob调用SAPI合成语音
- Java中java.text.SimpleDateFormat的日期格式用法