java - 我有一个特定时间作为字符串 ("7:00 PM ET")。 Joda-Time 可以将该字符串转换为用户的时区吗?

标签 java datetime jodatime

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

关于java - 我有一个特定时间作为字符串 ("7:00 PM ET")。 Joda-Time 可以将该字符串转换为用户的时区吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36226975/

相关文章:

Java url-pattern 所有子域重定向

java - URL以 "get"模式提交,响应“400”错误

scala - Joda Time : Convert UTC to local

java - 帮助设置 Java VM 大小

php - 交响乐 3 : Doctrine dateTime problems row

ruby-on-rails - 为什么介于两者之间? ruby 中 Date 和 DateTime 的工作方式不同?

mysql - 使用LOAD DATA时如何在MySQL中加载日期数据

java - 如何防止 Joda Time 在巴西 DST 过渡期间抛出异常

java - Hadoop 找不到 joda 依赖项

java - 为什么RecursiveTask在fork join中实现Serialized?