android 获取手机当前时区,解决时间偏移量和夏令时差问题

这篇具有很好参考价值的文章主要介绍了android 获取手机当前时区,解决时间偏移量和夏令时差问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 //获取当前时区
    public static int getTimeZone() {
        Date date=new Date();
        //取得本地时间
        Calendar cal = Calendar.getInstance();
        //取得时间偏移量
        int offset = cal.get(Calendar.ZONE_OFFSET)/(1000*60*60);
        //取得夏令时差
        int dstOffset=cal.get(Calendar.DST_OFFSET)/(1000*60*60);
        //从本地时间里扣除这些变量,即可以取得UTC时间
        cal.add(Calendar.MILLISECOND, -(offset+dstOffset));
        cal.add(Calendar.HOUR, -(offset + dstOffset));
        Long timeStampUTC = cal.getTimeInMillis();
        Long timeStamp = date.getTime();
        Long timeZone = (timeStamp - timeStampUTC) / (1000 * 3600);

        return timeZone.intValue();
    }

 世界时区转换的Demo文章来源地址https://www.toymoban.com/news/detail-482743.html


import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

import com.su.test.R;

public class MainActivity extends Activity {

	/**
	 * 测试时请手动切换手机的时差设置
	 */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initViews();
		initListeners();
		initValues();
	}

	private void initViews() {
		// TODO Auto-generated method stub
		// 例如:北京时间:2014-11-28 11:12:45 转化美国洛杉矶应为 2014-11-27 19:12:45
		Log.d("test", "北京时间转化美国洛杉矶时间:" + getZoneTime("2014-11-28 11:12:45", "yyyy-MM-dd HH:mm:ss"));
		//测试结果 D/test(23630): 北京时间转化美国洛杉矶时间:2014-11-27 19:12:45  与预期一致

		// 例如:北京时间:2014-11-28 11:13:42 转化英国伦敦应为 2014-11-28 03:13:42
		Log.d("test", "北京时间转化英国伦敦时间:" + getZoneTime("2014-11-28 11:13:42", "yyyy-MM-dd HH:mm:ss"));
		//测试结果 D/test(24005): 北京时间转化英国伦敦时间:2014-11-28 03:13:42  与预期一致

		// 例如:北京时间:2014-11-28 11:14:00 转化华宝客户-肯尼亚时间应为 2014-11-28 06:13:59
		Log.d("test", "北京时间转化肯尼亚(内罗毕)时间:" + getZoneTime("2014-11-28 11:14:00", "yyyy-MM-dd HH:mm:ss"));
		//测试结果 D/test(24553): 北京时间转化肯尼亚(内罗毕)时间:2014-11-28 06:14:00 与预期一致
		
		// 结论: getZoneTime(String strDate, String formatStr) 没问题
	}

	private void initListeners() {
		// TODO Auto-generated method stub

	}

	private void initValues() {
		// TODO Auto-generated method stub

	}
	
	/**
	 * 把北京时间转换成当前时区上的时间
	 * 
	 * @param strDate
	 * @param formatStr
	 * @return
	 */
	public static String getZoneTime(String strDate, String formatStr) {
		long defZone = 8 * 60 * 60 * 1000;
		Date date = StringToDate(strDate, formatStr);
		TimeZone zone = TimeZone.getDefault();

		return DateToString(new Date(date.getTime() - defZone + zone.getRawOffset()), formatStr);
	}

	/**
	 * 字符串转日期
	 * 
	 * @param dateStr
	 * @param formatStr格式
	 *            (如:yyyy-MM-dd HH:mm:ss)
	 * @return
	 */
	public static Date StringToDate(String dateStr, String formatStr) {
		DateFormat dd = new SimpleDateFormat(formatStr);
		Date date = null;

		try {
			date = dd.parse(dateStr);
		} catch (java.text.ParseException e) {
			e.printStackTrace();
		}

		return date;
	}

	/**
	 * 日期转获取字符串
	 * 
	 * @param date日期
	 * @param format格式
	 *            (如:yyyy-MM-dd HH:mm:ss)
	 * 
	 * @return
	 */
	public static String DateToString(Date date, String format) {
		SimpleDateFormat sdf = new SimpleDateFormat(format);
		return sdf.format(date);
	}

}

到了这里,关于android 获取手机当前时区,解决时间偏移量和夏令时差问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 通过adb shell 设置android时间(时区)同步

    设置时间同步,时区设置为上海 进入adb shell环境。在计算机上打开终端或命令提示符,并运行以下命令: adb shell 获取root权限(如果设备已经root)。在adb shell环境中运行以下命令:su 启用自动时间同步和自动时区同步。运行以下命令以启用设备的自动时间和自动时区同步:

    2024年02月07日
    浏览(51)
  • vue封装-获取当前时间

    在开发时,经常遇到转换时间戳的问题,这里封装了一个方法,方便使用。

    2024年02月13日
    浏览(72)
  • SqlServer 获取当前系统时间

    SqlServer 获取当前系统时间 获取当前系统时间 SELECT CONVERT(varchar(12),DATEADD(MONTH,0,GETDATE()),23) time –其中用到了DATEADD函数,参数0就代表今天。 CONVERT函数中的23代表样式 –上述结果如下 2. 在存储过程中将系统时间按赋值给变量 declare @time varchar(100) SELECT @time=CONVERT(varchar(12),DATEAD

    2024年02月12日
    浏览(43)
  • Qt - 获取系统当前时间

    Qt获取系统当前时间的四种方法(一般使用第一种或者第二种) //current_date字符串结果为”2016.05.20 12:17:01.445 周五” 其中时间的显示格式可灵活配置,此处简单说明本实例中用到的部分: yyyy表示年;MM表示月;dd表示日; hh表示小时;mm表示分;ss表示秒;zzz表示毫秒;ddd表示

    2024年02月06日
    浏览(89)
  • Python 获取当前系统时间

    在有的时候,系统不能联网,需要获取系统的当前实现,此时需要python的datetime库。 一、使用方法 1. 导入库:import datetime 2.获取当前日期和时间:now_time = datetime.datetime.now() 3.格式化成我们想要的格式:.strftime() 二、示例 #输出 230215 三、格式参数 %a 星期几的简写 %A 星期几的

    2024年02月16日
    浏览(37)
  • Python获取当前时间

    打印结果: 打印结果:    打印结果: 2022-12-03 18:01:04   

    2024年02月13日
    浏览(45)
  • Python获取当前时间日期

    时间日期类型在Python中主要有两个模块:time模块 和 datetime模块 time模块: 是基于Unix Timestamp(时间戳)实现的,所能表述的范围被限定在1970-2038年之间; 时间戳: 是指格林尼治时间1970年01月01日00时00分00秒起至现在的总秒数,结果是一个浮点数。 2.1 获取当前时间戳 示例:

    2024年02月13日
    浏览(47)
  • Java获取当前时间

    通过Date类来获取当前时间,比较常用。需要使用Java.util.Date类,速度一般。 通过System类中的currentTimeMillis方法来获取当前时间,无需导入类,速度最快。 此方法优势是不受时区的影响,但是得到结果是时间戳的格式 可以通过代码将时间戳转化为我们可以理解的格式: 转换后

    2024年02月16日
    浏览(43)
  • cmd命令获取当前时间

    在命令提示符中,你可以使用以下命令来获取当前时间: date 在命令提示符下输入 date 并按回车键,就可以看到当前的日期和时间。 time 在命令提示符下输入 time 并按回车键,就可以看到当前的时间。 wmic 在命令提示符下输入 wmic path win32_localtime get /format:list 并按回车键,就

    2024年02月12日
    浏览(46)
  • java获取当前系统时间

      在Java中,可以使用以下几种方法获取当前系统时间: 方法1:使用java.util.Date类 ```java import java.util.Date; public class Main { public static void main(String[] args) { Date date = new Date(); System.out.println(\\\"当前时间:\\\" + date); } } ``` 方法2:使用java.time.LocalDateTime类(推荐,自Java 8引入

    2024年02月11日
    浏览(68)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包