android 获取手机时区怎么获取不同时区的日期和时间

查看: 1120|回复: 197
android-获取网络时间、获取特定时区时间、时间同步
TA的每日心情困 11:11签到天数: 136 天连续签到: 1 天[LV.7]常住居民III帖子交易币下载币
& && &&&方法一:
SimpleDateFormat dff = new SimpleDateFormat(&yyyy-MM-dd HH:mm:ss&); dff.setTimeZone(TimeZone.getTimeZone(&GMT+08&));&&String ee = dff.format(new Date());这个方法获取的结果是24小时制的,月份也正确。
这个方法不随手机时间的变动而变动。也就是说,即使手机设置成别的时区,不是东八区,这个方法返回的也照样是北京时间!!!这正是我在做项目的时候用到的方法!!彻底解决项目需求!
Calendar calendar = Calendar.getInstance();SimpleDateFormat sdf = new SimpleDateFormat(&dd-MMM-yyyy hh:mm:ss&);sdf.setTimeZone(TimeZone.getTimeZone(&GMT+8&));String rt = sdf.format(calendar.getTime());这个方法获取的结果是不是24小时制的,月份也正确。
public static String getLocalDatetimeString(String local) {& &&&Calendar cal = new GregorianCalendar(TimeZone.getTimeZone(local));& &&&cal.setTimeInMillis(Calendar.getInstance().getTimeInMillis());& &&&String date = cal.get(Calendar.YEAR) + &-& + (cal.get(Calendar.MONTH) + 1) + &-& + cal.get(Calendar.DAY_OF_MONTH);& &&&String time = cal.get(Calendar.HOUR_OF_DAY) + &:& + cal.get(Calendar.MINUTE) + &:& + cal.get(Calendar.SECOND);& &&&return date + & & +&&}&&方法调用:String tt = getLocalDatetimeString(&GMT+8&); 代码里也看出来了,这个在月份上加了一个1, 24小时制
以上三种方法验证如下:
import java.sql.Timport java.text.SimpleDateFimport java.util.Cimport java.util.Dimport java.util.GregorianCimport java.util.TimeZpublic class TimeTest {& & /**& &&&* @param args& &&&*/& & public static void main(String[] args) {& && &&&method1();& && &&&method2();& && &&&method3();& & }& & static void method1(){& && &&&SimpleDateFormat dff = new SimpleDateFormat(&yyyy-MM-dd HH:mm:ss&);& && && &dff.setTimeZone(TimeZone.getTimeZone(&GMT+08&));& && && & String ee = dff.format(new Date());& && &&&System.out.println(&ee=&+ee);& & }& & static void method2(){& && &&&Calendar calendar = Calendar.getInstance();& && &&&SimpleDateFormat sdf = new SimpleDateFormat(&dd-MMM-yyyy hh:mm:ss&);& && &&&sdf.setTimeZone(TimeZone.getTimeZone(&GMT+8&));& && &&&String rt = sdf.format(calendar.getTime());& && &&&System.out.println(&TimeTest.method2() rt=&+rt);& & }& & static void method3(){& && &&&String local = &GMT+8&;& && &&&Calendar cal = new GregorianCalendar(TimeZone.getTimeZone(local));& && && & cal.setTimeInMillis(Calendar.getInstance().getTimeInMillis());& && && & String date = cal.get(Calendar.YEAR) + &-& + (cal.get(Calendar.MONTH) + 1) + &-& + cal.get(Calendar.DAY_OF_MONTH);& && && & String time = cal.get(Calendar.HOUR_OF_DAY) + &:& + cal.get(Calendar.MINUTE) + &:& + cal.get(Calendar.SECOND);& && && & System.out.println(&TimeTest.method3() date=&+date+&,time=&+time);& & }}结果如下:
本人采用的是第一种方法,因为第一种方法的时间是不随手机时间的设置而改变。
第二种方法也是可以的,不过时间小时是12进制。
第四种方法:
网上还有这种方法获取时间:
URL url=new URL(&http://www.bjtime.cn&);//取得资源对象& && & URLConnection uc=url.openConnection();//生成连接对象& && & uc.connect(); //发出连接& && & long ld=uc.getDate(); //取得网站日期时间& && & Date date=new Date(ld); //转换为标准时间对象& && & //分别取得时间中的小时,分钟和秒,并输出& && & System.out.print(date.getHours()+&时&+date.getMinutes()+&分&+date.getSeconds()+&秒&);这种方式需要开启一个线程获取时间,同时也存在着一种风险就是由于网络问题,获取不到响应的问题。还有一个重要的问题件就是这个时间的获取会随着手机时区的改变而改变。
通过网络或者GPS的方式。代码:LocationManager locMan = (LocationManager) this.getSystemService(MainActivity.LOCATION_SERVICE);//获取最近一次知道的时间long networkTS = locMan.getLastKnownLocation(LocationManager.NETWORK_PROVIDER).getTime();或者实时的获取时间:locMan.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, this); //获取当前时间当我们使用requestLocationUpdates时,我们需要实现LocationListener接口。在LocationListen的回调onLocationChanged当中获取时间@Overridepublic void onLocationChanged(Location location) {// TODO Auto-generated method stublong time = location.getTime();Date date = new Date(time);System.out.println(time + & NETWORK_PROVIDER & + date);// System.out.println(STANDARD_TIME + & &);}上面的方法中,
ts参数就是服务器返回的当前时间,形如yyyy-MM-dd hh:mm:ss的字符串
intervalTime参数,是获取到服务器响应到用户进行操作的时间间隔,就是使用上面的elapsedRealtime ()方法获取两次时间计算得到。
方法的返回值String,形如 HH:mm:ss,这样返回字符串方便比较时间字符。由于视频事件限制,就是时分秒,不可能涉及到年月日,所以这里就是直接返回时分秒。
有了这个方法,完美解决了android APP与服务器时间保持基本一致的需求。但是还是存在一定的问题的,因为服务器返回时间不定,可能长可能短,所以时间并不会和服务器的当前时间分秒不差,总会有延时,但是这个延时可以接受,大概最多在10秒左右。可以在时间间隔上稍微加一点就可以了。基本就满足需求了。
免责声明 []
1、文章内容所有言论和图片纯属会员个人意见,与本论坛立场无关;
2、文章内容有可能转载自其它媒体,本站并不赞同其观点和对其真实性负责;
3、如文章内容侵犯到任何法规、版权等问题,请立即告知本站,本站将及时予与删除并致以最深的歉意;
4、内容仅供学习交流不得用于任何商业用途,下载试用请于24小时内自行删除,因使用所造成的损失全部由使用者本人承担;
该用户从未签到帖子交易币下载币
编程名人, 积分 595, 距离下一级还需 205 积分
编程名人, 积分 595, 距离下一级还需 205 积分
加油!!!!!!!!!!!!!!!!!!!
该用户从未签到帖子交易币下载币
编程高手, 积分 827, 距离下一级还需 773 积分
编程高手, 积分 827, 距离下一级还需 773 积分
加油!!!!!!!!!!!!!!!!!!!
该用户从未签到帖子交易币下载币
编程名人, 积分 615, 距离下一级还需 185 积分
编程名人, 积分 615, 距离下一级还需 185 积分
感谢分享,下载学习
该用户从未签到帖子交易币下载币
小有名气, 积分 146, 距离下一级还需 54 积分
小有名气, 积分 146, 距离下一级还需 54 积分
起易有你更精彩
该用户从未签到帖子交易币下载币
编程名人, 积分 524, 距离下一级还需 276 积分
编程名人, 积分 524, 距离下一级还需 276 积分
谢谢楼主分享!!
该用户从未签到帖子交易币下载币
编程初步, 积分 6, 距离下一级还需 24 积分
编程初步, 积分 6, 距离下一级还需 24 积分
加油!!!!!!!!!!!!!!!!!!!
该用户从未签到帖子交易币下载币
编程名人, 积分 450, 距离下一级还需 350 积分
编程名人, 积分 450, 距离下一级还需 350 积分
支持起易!!
TA的每日心情困 11:29签到天数: 1 天连续签到: 1 天[LV.1]初来乍到帖子交易币下载币
编程名人, 积分 671, 距离下一级还需 129 积分
编程名人, 积分 671, 距离下一级还需 129 积分
谢谢楼主分享!!
TA的每日心情开心 19:15签到天数: 8 天连续签到: 1 天[LV.3]偶尔看看II帖子交易币下载币
编程名人, 积分 707, 距离下一级还需 93 积分
编程名人, 积分 707, 距离下一级还需 93 积分
支持起易!!
站长推荐 /1
请关注易锦教育公众号,课程研发、职业规划、最新通告、企业风采等全都在这里啦!-关注惊喜不断哦...
Powered byandroid获取时间差的方法_Android
作者:用户
本文讲的是android获取时间差的方法_Android,
本文实例讲述了android获取时间差的方法。分享给大家供大家参考。具体分析如下:
有些时候我们需要获取当前时间和某个时间之间的时间差,这时如何获取呢?
1. 引用如下命名空间:
import java.util.D
本文实例讲述了android获取时间差的方法。分享给大家供大家参考。具体分析如下:
有些时候我们需要获取当前时间和某个时间之间的时间差,这时如何获取呢?
1. 引用如下命名空间:
import java.util.D
import android.text.format.DateF
2. 设置时间格式:
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
3. 获取时间:
Date curDate = new Date(System.currentTimeMillis());
//PROCESSING
Date endDate = new Date(System.currentTimeMillis());
long diff = endDate.getTime() - curDate.getTime();
这样获取的就是时间间隔了,并且是ms级别的。
希望本文所述对大家的Android程序设计有所帮助。
以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索android
获取时间差
android 获取时间差、android 时间差获取秒、android 反射获取方法、android 获取方法名、android 计算时间差,以便于您获取更多的相关知识。
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
40+云计算产品,6个月免费体验
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
云服务器9.9元/月,大学必备
云栖社区(yq.aliyun.com)为您免费提供相关信息,包括
,所有相关内容均不代表云栖社区的意见!android 获取UTC时间和与.net时间戳的转换
时间: 17:16:37
&&&& 阅读:2397
&&&& 评论:
&&&& 收藏:0
标签:&&&&&&& & 本文纯属整合,将在项目中用到的UTC时间和与.NET时间戳的转换进行记录。& & 1、android获取UTC时间/**
* 获取UTC时间
*/ public static String getUTCTimeStr() {
DateFormat format = new SimpleDateFormat("yyyy/MM/dd/HH/mm/ss");
StringBuffer UTCTimeBuffer = new StringBuffer();
// 1、取得本地时间:
Calendar cal = Calendar.getInstance();
// 2、取得时间偏移量:
int zoneOffset = cal.get(java.util.Calendar.ZONE_OFFSET);
// 3、取得夏令时差:
int dstOffset = cal.get(java.util.Calendar.DST_OFFSET);
// 4、从本地时间里扣除这些差量,即可以取得UTC时间:
cal.add(java.util.Calendar.MILLISECOND, -(zoneOffset + dstOffset));
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int day = cal.get(Calendar.DAY_OF_MONTH);
int hour = cal.get(Calendar.HOUR_OF_DAY);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
UTCTimeBuffer.append(year).append("/").append(month).append("/")
.append(day);
UTCTimeBuffer.append("/").append(hour).append("/").append(minute)
.append("/").append(second);
format.parse(UTCTimeBuffer.toString());
return UTCTimeBuffer.toString();
} catch (ParseException e) {
e.printStackTrace();
} catch (java.text.ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}只需直接拷贝去使用即可。& & 2、获取时间戳/**
* 获取时间戳
* @param dateCur
*/ public static long GetTicks(String dateCur) {
// convert the target-epoch time to a well-format string
// String date = new java.text.SimpleDateFormat("yyyy/MM/dd/HH/mm/ss")
// .format(new Date(Long.parseLong(epochStr)));
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd/HH/mm/ss");
// String dateCur = sdf.format(new Date());
String[] ds = dateCur.split("/");
// start of the ticks time
Calendar calStart = Calendar.getInstance();
* 此处的参数很重要,原则上都是1,日所以为2,是因为之前的日期没减掉1 第三个参数为1:日期多了2天,为2则日期多1天
//上传失败时这里总会出现混乱的情况,需要找到源头解决//
calStart.set(1, 1, 0, 0, 0, 0);
calStart.set(1, 1, 3, 0, 0, 0);
// the target time
Calendar calEnd = Calendar.getInstance();
calEnd.set(Integer.parseInt(ds[0]), Integer.parseInt(ds[1]),
Integer.parseInt(ds[2]), Integer.parseInt(ds[3]),
Integer.parseInt(ds[4]), Integer.parseInt(ds[5]));
// epoch time of the ticks-start time
long epochStart = calStart.getTime().getTime();
// epoch time of the target time
long epochEnd = calEnd.getTime().getTime();
// get the sum of epoch time, from the target time to the ticks-start
long all = epochEnd - epochS
// convert epoch time to ticks time
long ticks = ((all / 1000) * 1000000) * 10;
}将第一步获取的UTC时间传给第二步,即可获取时间戳!& & 对于时间戳的解释,我将引用一篇文章来说明,个人其实也是在探索中:先来个名词解释:Epoch time:指从日零时起到现在为止的"second(秒) 数".注意我给"second(秒) 数"加了引号,是因为在不一样的项目中,计量单位可能是不同的,需要仔细的阅读相关文档.比如Gtalk Api的Gmail Notifications文档中,所使用的date数为从日零时起到现在为止的"millisecond(毫秒) 数".C#的Datetime.ticks:指从日零时起到现在为止的one ten-millionth of a second数量,或者one hundred nanoseconds of a second数量,也就是"千万分之一秒"的数量.java的Date.getTime():这个方法返回目标时间到日零时为止的"millisecond(毫秒) 数".然后来做个转换:1 second(秒)=1000 millisecond(毫秒)=10 x 100 0000 one ten-millionth of a second(千万分之一秒)好了,接下来是我们的java转换函数&public static long GetTicks(String epochStr)&{&&//convert the target-epoch time to a well-format string&& String date = new java.text.SimpleDateFormat("yyyy/MM/dd/HH/mm/ss").format(new Date (Long.parseLong(epochStr)));&& String[] ds=date.split("/");&&&&&&& //start of the ticks time&&Calendar calStart=Calendar.getInstance();&&calStart.set(1, 1, 3, 0, 0, 0);&&&&//the target time&&Calendar calEnd=Calendar.getInstance();&&calEnd.set(Integer.parseInt(ds[0]) ,Integer.parseInt(ds[1]),Integer.parseInt(ds[2]),Integer.parseInt(ds[3]),Integer.parseInt(ds[4]),Integer.parseInt(ds[5]) );&&&&//epoch time of the ticks-start time&&long epochStart=calStart.getTime().getTime();&&//epoch time of the target time&&long epochEnd=calEnd.getTime().getTime();&&&&//get the sum of epoch time, from the target time to the ticks-start time&& long all=epochEnd-epochS&&&&&& //convert epoch time to ticks time&&&&& long ticks=( (all/1000) * 1000000) * 10;&&&&&&&&&&&}用图来说明:&&& |&&&&&& |&&&&&&&& |目标时间& 1970年&&& 0001年我是分别取得目标时间和0001年到1970年的"millisecond(毫秒) 数",然后加在一起,这样就得到了目标时间到0001年的"millisecond(毫秒) 数",然后把这个数字换算成"千万分之一秒"的数量,得到ticks数.或许你会发现,为什么0001年的计算从1月3号起,不是应该1月1号吗.这个问题我也很奇怪,因为我发现如果从1月1号起,时间上就总是差着两天,这原因等待高手来解决 :)注意:.net里确实是从日开始。&不过历史上因为历法的转换, 有“丢失的2天”。 & &个人在项目中发现一个问题,calStart.set(1, 1, 3, 0, 0, 0); &这里设置的时候会在不同的时间发生不同的变化,导致最后设置的时间也也发生变化,有的系统是从开始计算,有的会从开始,导致我拿到的时间都不一致,每次出问题就需要更改这里的设置(calStart.set(1, 1, 3, 0, 0, 0))就恢复正常了,如果有朋友也发生这样的问题,请分享一下,本人将不甚感激,本人如果研究出来了也会更新进行分享,谢谢!欢迎探讨!本文出自 “” 博客,请务必保留此出处标签:&&&&&&原文:http://wyong.blog.51cto.com/7679
教程昨日排行
&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!1 取得系统时间
3 long time=System.currentTimeMillis();
6 final Calendar mCalendar=Calendar.getInstance();
7 mCalendar.setTimeInMillis(time);
8 取得小时:mHour=mCalendar.get(Calendar.HOUR);
9 取得分钟:mMinuts=mCalendar.get(Calendar.MINUTE);
13 Time t=new Time(); // or Time t=new Time("GMT+8"); 加上Time Zone资料
14 t.setToNow(); // 取得系统时间。
15 int year = t.
16 int month = t.
17 int date = t.monthD
18 int hour = t.
21 DateFormat df = new SimpleDateFormat("HH:mm:ss");
22 df.format(new Date());
使用1而不用2,因为2会获取年\月\日等,处理时间不能保证.
阅读(...) 评论()Android获取系统时间以及网络时间
转载 & & 投稿:lijiao
这篇文章主要为大家详细介绍了Android获取系统时间以及网络时间的方法,感兴趣的小伙伴们可以参考一下
项目开发中,很多时候会用到android的时间,罗列一下获取的时间的方式,和大家共同学习进步
一、获取系统时间&
1.通过Calendar类来获取系统当前的时间
Calendar calendar = Calendar.getInstance();
long unixTime = calendar.getTimeInMillis();//这是时间戳
Logger.i(TAG,"calendar---&&&"+"当前时间为:" + 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) +
&打印结果如下:
&calendar---&&&当前时间为:2016年 6月 13日 14时 38分 58秒&
2.通过Time来获取,android的文档中说使用Time比Calendar对CPU的性能损耗更小,我却不推荐使用Time,因为Time使用必须在24小时制的系统中,如果用户手机就设成12小时制的,这时就有误差
Time times = new Time("GMT+8");
/*对于已经设定为GMT时间标准的dateFormat来说,
一切需要他转换的字符串日期都是GMT标准时间,
转换后返回的Date由于默认
*遵守系统默认时区,所以转换给Date的日期需要+8
(例如北京标准时区),也就是时区与标准不同导致的时差。*/
times.setToNow();
int year = times.
int month = times.
int day = times.monthD
int minute = times.
int hour = times.
int sec = times.
Logger.i(TAG,"当前时间为:" + year +
"年 " + month +
"月 " + day +
"日 " + hour +
"时 " + minute +
"分 " + sec +
打印结果:当前时间为:2016年 6月 13日 6时 38分 58秒
注意:这时的时间和上面使用时间是同一时间,不过时间我都调成是12小时制的
当然,还有其他的获取方式,不过结果基本都一样&&&
java.text.SimpleDateF
SimpleDateFormat
SimpleDateFormat
("yyyy年MM月dd日
HH:mm:ss");
Date curDate = new Date(System.currentTimeMillis());
formatter.format(curDate);
还有&&&&&&&&&
DateFormat df = new SimpleDateFormat("HH:mm:ss");
df.format(new Date());
二、获取网络时间
&很多时候,由于手机的不确定性,导致各个手机的时间都不尽相同,如果开发中需要获取统一的时间来匹配一些规则的时候,比如我之前公司就是通过或去当前时间并且转换之后来匹配网络连接的规则,防止大批量的抓包,那么这个时候就需要一个统一的时间和后台进行匹配,这是简单的使用获取系统时间就可能存在问题,用户手机如果调成自动获取网络时间的话没问题,但是如果不是呢?所以获取网络时间就派上了用处&
URL url =//取得资源对象
url = new URL("http://www.baidu.com");
URLConnection uc = url.openConnection();//生成连接对象
uc.connect(); //发出连接
ld = uc.getDate(); //取得网站日期时间
Logger.i(TAG,"ld----&&&&"+ld);
} catch (Exception e) {
e.printStackTrace();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 android 自动获取时区 的文章

 

随机推荐