我正在获取数据到我的应用程序,它以固定的东部时区作为字符串显示某些事件,格式为“ ET 7:00 PM ET”。但是我想知道是否可以在Joda-Time中使用某个函数来传递具有该格式的字符串,并使其输出与用户所在时区相对应的正确时间。例如,如果我在美国中部某地,它将输出“ 6:00 PM”。或者,如果我在西海岸,它将显示“ 4:00 PM”。

我已经看到Joda Time确实有一个构造函数,可以采用类似以下的字符串:

DateTime dateTimeUtc = new DateTime( "2014-02-14T06:04:00:00", DateTimeZone.UTC );

但是那种字符串格式不是我想要的。

编辑:我也将通过当前日期,并且时间将用于该日期。

最佳答案

您可以将Date与SimpleDateFormat一起使用来实现此目的,尽管您希望在时间结束时删除ET

String time = "7:00 PM";
SimpleDateFormat format = new SimpleDateFormat("hh:mm a");
try {
    Date date = format.parse(time);
    format.setTimeZone(TimeZone.getTimeZone("EST"));
    System.out.println(format.getTimeZone().getID()+": "+format.format(date));

    format.setTimeZone(TimeZone.getTimeZone("PST"));
    System.out.println(format.getTimeZone().getID()+": "+format.format(date));

    format.setTimeZone(TimeZone.getTimeZone("UCT"));
    System.out.println(format.getTimeZone().getID()+": "+format.format(date));

    format.setTimeZone(TimeZone.getDefault()); // The user's timezone.
    System.out.println(format.getTimeZone().getID()+": "+format.format(date));
} catch (ParseException e) {
    e.printStackTrace();
}
/*
EST: 07:00 PM
PST: 04:00 PM
UCT: 12:00 AM
America/New_York: 07:00 PM
*/


看来您正在从EST时区接收时间,但想将其转换为用户时区。在解析时间之前设置格式时区会有所不同。尝试这个:

String time = "7:00 PM";
SimpleDateFormat format = new SimpleDateFormat("hh:mm a");
format.setTimeZone(TimeZone.getTimeZone("EST"));
try {
    Date date = format.parse(time);
    System.out.println(format.getTimeZone().getID()+": "+format.format(date));
    format.setTimeZone(TimeZone.getDefault());
    System.out.println(format.getTimeZone().getID()+": "+format.format(date));
} catch (ParseException e) {
    e.printStackTrace();
}

10-06 12:55
查看更多