【问题标题】:Get time of different Time zones on selection of time from time picker从时间选择器中选择时间获取不同时区的时间
【发布时间】:2012-02-02 07:02:54
【问题描述】:

我遇到了将选定的小时和分钟转换为国家/地区不同时区的问题。 假设如果我选择印度上午 10 点,那么我想知道印度上午 10 点在美国/纽约和东京的时间。反之亦然。

任何帮助都是可观的... 谢谢

【问题讨论】:

  • 我知道我的问题不是转换当前时间,我的问题是转换所选时间
  • 我尝试了 2 天,但我没有得到结果
  • 我能知道您是如何解决问题的吗?我得到一个!美国/纽约设备的时差。但是,如果我们将时区更改为 Newyourk 时区,它就可以正常工作。只有在纽约的设备在面对!对我来说时差。我能知道你是如何解决这个问题的吗?

标签: android


【解决方案1】:

请在下面找到解决方案:

    SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mma");
    TimeZone timezone = TimeZone.getDefault();
    TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
    Date d = new Date();
    sdf.setTimeZone(timezone);
    String strtime = sdf.format(d);
    Log.e("str time gmt  ",strtime);
    sdf.setTimeZone(utcTimeZone);
     strtime = sdf.format(d);
    Log.e("str time utc ",strtime);

我认为这会解决你的问题

【讨论】:

  • 我从选定的小时和分钟获取UTC时间,而不是所需区域的时间
【解决方案2】:

您可能可以使用Joda Time - Java date and time API。你可以根据Joda Time中定义的Canonical ID获取DateTimeZone

DateTimeZone zone = DateTimeZone.forID("Asia/Kolkata");

Joda Time 有一个完整的list of Canonical ID,您可以从中获取 TimeZone,具体取决于 Canonical ID。

因此,如果您想在此时获取纽约的当地时间,您可以执行以下操作

    // get current moment in default time zone
    DateTime dt = new DateTime();
    // translate to New York local time
    DateTime dtNewYork = dt.withZone(DateTimeZone.forID("America/New_York"));

如需了解更多想法,您可以参考Changing TimeZone

【讨论】:

  • 你在使用这个过程中遇到了什么问题?
【解决方案3】:

尝试使用Joda-Time library 检查org.joda.time.DateTimeZone class

Here 是相同的 API 文档。

【讨论】:

    【解决方案4】:

    你也可以使用,这里不需要外部API

    DateFormat format = new SimpleDateFormat("MMMMM d, yyyy, h:mm a");
    TimeZone utc = TimeZone.getTimeZone("America/New_York");
    System.out.println(utc.getID());
    GregorianCalendar gc = new GregorianCalendar(utc);
    Date now = gc.getTime();
    System.out.println(format.format(now));
    

    你可以在这个Link看到更多的时区

    输出

    美国/纽约

    2012 年 12 月 29 日上午 11:04

    如果您不知道城市名称,也可以按区域名称使用,如下所示

    DateFormat format = new SimpleDateFormat("MMMMM d, yyyy, h:mm a");
    TimeZone cst = TimeZone.getTimeZone("US/Eastern");
    System.out.println(cst.getID());
    GregorianCalendar gc = new GregorianCalendar(cst);
    Date now = gc.getTime();
    format.setTimeZone(cst);
    System.out.println(format.format(now))
    

    输出

    美国/东部

    2012 年 12 月 29 日凌晨 12:38

    【讨论】:

      【解决方案5】:

      不太确定我将提供的解决方案,但我认为您可以尝试一下。 GMT(格林威治标准时间)是一个标准。我认为您可以将其作为基础并计算所需的时间。 GMT 标准也很容易获得。

      例如:在安装 Windows XP 或 Windows 7 等操作系统时,我们从下拉菜单中选择时间。我的观点是,以此为基础,您可以根据需要找到纽约-美国和东京-日本的时区之间的差异,反之亦然。

      希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-30
        • 2015-12-17
        相关资源
        最近更新 更多