【问题标题】:getting the wrong timezone in java / android [duplicate]在 java / android 中获取错误的时区 [重复]
【发布时间】:2013-08-26 13:04:43
【问题描述】:
String = 26/8/2013 15:59;

我想将此日期转换为 GMT,但是在应用以下代码后,我得到的是 EEST 时间而不是 GMT。

DateFormat df = new SimpleDateFormat("dd/MM/yyyy h:m");
df.setTimeZone(TimeZone.getTimeZone("UTC"));
df.parse(newDate);
Log.i(tag, df.parse(newDate).toString());

输出:

Mon Aug 26 18:59:00 EEST 2013

怎么了?

【问题讨论】:

    标签: java android date time timezone


    【解决方案1】:

    您的解析是正确的,不同之处仅在于您在制作 toString() 时用于显示的区域设置时区。我只是使用格式化输出来演示正确的格式。以下是详细示例:

    final String time = "26/8/2013 15:59";
    TimeZone timeZone = TimeZone.getTimeZone("UTC");
    final String REQUEST_DATE_FORMAT = "dd/MM/yyyy h:m";
    
    DateFormat format = new SimpleDateFormat(REQUEST_DATE_FORMAT);
    Date localDate = format.parse(time);
    
    // localDate.toString()
    // PRINT. Mon Aug 26 15:59:00 EEST 2013
    
    Calendar cal = Calendar.getInstance(timeZone);
    cal.setTime(localDate);
    
    format.setTimeZone(timeZone);
    final String utcTime = format.format(cal.getTime());
    // PRINT. 26/08/2013 12:59
    

    【讨论】:

    • @ShamimAhmedd,我设备的区域设置和 GMT 之间的差异是 +3.. 但是我无法在 3 小时后得到 GMT..
    • @tony9099,首先您将日期解析为 UTC(15:59),但是当您尝试以本地格式(例如 18:59)显示它时,这是正确的。正如您在解析之前设置时区一样。但是如果你在解析日期后设置时区,你会得到 UTC=1:59 和 local =15:59。您必须确定您的源格式是什么。 UTC 或本地时间。
    • 它是本地的。如果您相应地更新代码,我将不胜感激。让事情更清楚: final String time = "26/8/2013 15:59";
    【解决方案2】:

    没有什么是真的错了。您正在成功解析解释为 UTC 时区的日期时间字符串。

    将其打印到日志时,您会得到所需的信息 - Date.toString() 返回格式化为当前区域设置(包括时区)的日期。 UTC 和 EEST 之间的差异是 3 小时。

    如果您想对其进行格式化以显示其他时区,请将其传递给配置为所需时区的 SimpleDateFormatformat()

    【讨论】:

    • .format 应该在哪里调用?在 df.parse(newDate) 之前;还是之后?
    【解决方案3】:

    我认为您应该使用以下方法: 日期 myDate = new Date();

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeZone(TimeZone.getTimeZone("UTC"));
    calendar.setTime(myDate);
    Date time = calendar.getTime();
    SimpleDateFormat outputFmt = new SimpleDateFormat("MMM dd, yyy h:mm a zz");
    String dateAsString = outputFmt.format(time);
    System.out.println(dateAsString);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 2016-10-21
      • 2021-06-25
      • 2014-07-21
      • 2012-03-17
      • 2011-03-16
      • 1970-01-01
      相关资源
      最近更新 更多