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