我有一个特定的时间作为字符串(“7:00 PM ET”)。 Joda-Time 能否将该字符串转换为用户的时区?

I have a specific time as a string ("7:00 PM ET"). Can Joda-Time convert that string to the user's time zone?

我正在向我的应用程序获取数据,它以以下格式的字符串显示具有固定东部时区的某些事件:“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();
}