如何根据设备的位置转换 GMT 时区?

Posted

技术标签:

【中文标题】如何根据设备的位置转换 GMT 时区?【英文标题】:How to convert GMT timezone according to device's Location? 【发布时间】:2019-08-31 20:59:45 【问题描述】:

我想根据设备的位置将时区从 GMT 转换为本地时区。我尝试了各种方法,但没有得到想要的结果。我知道网上有很多解决方案,但我被困在这里。那我该怎么做呢?我有一个 GMT 时区格式,例如: 2019-04-10T08:20:25Z

这是我目前尝试过的代码:

 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy:MM:dd'T'HH:mm:ss'Z'");
    simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    try 
        Date myDate = simpleDateFormat.parse(onlyDate);
        android.util.Log.v("Df", String.valueOf(myDate));
     catch (ParseException e) 
        e.printStackTrace();
    

这里 onlyDate 是 GMT 时区

【问题讨论】:

顺便考虑扔掉长期过时且臭名昭著的麻烦SimpleDateFormat和朋友,并将ThreeTenABP添加到您的Android项目中,以便使用java.time,现代Java日期和时间API .使用起来感觉好多了。 【参考方案1】:

使用语言环境:

  override fun formatDate(date: Date?, dateFormat: String, locale: Locale?): String 
    if (date != null) 
        val localeToUse: Locale
        if (locale != null) 
            localeToUse = Locale.getDefault()
         else 
            localeToUse = Locale.UK
        
        try 
            val targetFormat = SimpleDateFormat(dateFormat, localeToUse)
            return targetFormat.format(date).toString()
         catch (ignore: Exception) 
            // Empty
        
    

    return ""

Java

   String formatDate(Date date, String dateFormat, Locale locale)
    if (date != null) 
        Locale localeToUse;
        if (locale != null) 
            localeToUse = Locale.getDefault();
         else 
            localeToUse = Locale.UK;
        
        try 
            SimpleDateFormat targetFormat = new SimpleDateFormat(dateFormat, localeToUse);
            return targetFormat.format(date);
         catch (Exception ignore) 
            // Empty
        
    

    return "";

【讨论】:

在java中怎么做?【参考方案2】:

这对我有用:

 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
            formatter.setTimeZone(TimeZone.getTimeZone("UTC"));
            Date value = null;
            try 
                value = formatter.parse(onlyDate);
                SimpleDateFormat dateFormatter = new SimpleDateFormat("dd-MMM-yyyy h:mm:ss a");
                dateFormatter.setTimeZone(TimeZone.getDefault());
               ourDate = dateFormatter.format(value);
                android.util.Log.v("lh", ourDate);

             catch (ParseException e) 
                e.printStackTrace();
            

【讨论】:

以上是关于如何根据设备的位置转换 GMT 时区?的主要内容,如果未能解决你的问题,请参考以下文章

如何将“GMT + 5.5_(INDIA)”转换为时区“Asia / Kolkata”

如何使用 MQ 的 esql 将日期的特定时区转换为 GMT 时区?

如何在 Python 中将本地时间转换为 GMT 时区

如何将日期/时间从 GMT 转换为本地时区

用于查找位置时区的 Ruby gem [关闭]

IOS - 以 GMT 格式获取设备的当前时区