【Android Tips】Timestamp在Android上的转换

   毫无疑问,Java作为Android最主要的开发语言,它具有方法将时间戳直接转化为日期对象(Date 或 Calendar)的,但是作为在手机上运行的虚拟机,又有一些区别了。

        /** 由时间戳转化为文本,时间单位:ms */
	 private String getTime(long time) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		String date = sdf.format(time);
		return date;
	}

    这是我最开始写的将时间戳转化为格式时间字符串的方法,这个方法直接在JVM上面跑完全没问题!但是我让这些代码在手机里面跑的话,时间就会差上那么几个小时。由于时间差的并不是很多,大概也就是几个小时,猜测是时区什么鬼的应该没设好。于是

        /** 由时间戳转化为文本,时间单位:ms */
	 private String getTime(long time) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss",Locale.CHINA);
		String date = sdf.format(time);
		return date;
	}

   完全没用(WTF?)这个方法行不通,就只能设死时区了,在Android中对时区的设置由TimeZone控制,所以

/** 由时间戳转化为文本 */
	private String getTime(String time) {
		TimeZone.setDefault(TimeZone.getTimeZone("GMT+8:00"));
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
		String date = sdf.format(Long.parseLong(time + "000"));
		return date;
	}


终于他妈对了!!就是这样!Timestamp在Android上的转换绝对不能忘记时区的变换,这样得出的时间才是正确的。但我后来心想也不对,他默认获得的时区应该是系统默认的时区,这样的话我得到时区应该是对的才对,看了以下AVD模拟器,原来里面设置的时区是默认了,注释掉改时区的代码,修改了一下设置里的时区,然后重新跑一遍。


   测试完毕。。发现在模拟器时间已正常。结论 改时区代码如上,如果不确定系统默认时区,设置时区代码最好还是加上!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值