转换;“美国/洛杉矶”;时区至;PST“;或;PDT“;用Java编写
我的服务器向我发送“美国/洛杉矶”格式的时区。在客户端上,我需要在该时区中显示一个时间。答案将是“PST”或“PDT”,具体取决于给定时间的夏令时。我如何进行转换 我用的是JavaMe(准确地说是Blackberry 4.7),所以我不能用Joda时间 我需要对很多日期(但只有一个时区)快速进行此计算,因此我不能让服务器向我发送偏移量,因为偏移量可能会根据日期而变化 编辑:让我重申一下这个问题,因为似乎有些混乱。我得到了zoneinfo的名字和日期。我想知道那个时区在那个日期相对于格林尼治标准时间的偏移量。答案因夏令时而异 作为额外的好处,我想让TLA向用户显示(即“PST”或“PDT”),但这是次要的 解决方案:我将在这里总结解决方案,因为从下面的答案中看不太清楚。在J2ME中,这基本上满足了我的需要:转换;“美国/洛杉矶”;时区至;PST“;或;PDT“;用Java编写,java,blackberry,date,java-me,timezone,Java,Blackberry,Date,Java Me,Timezone,我的服务器向我发送“美国/洛杉矶”格式的时区。在客户端上,我需要在该时区中显示一个时间。答案将是“PST”或“PDT”,具体取决于给定时间的夏令时。我如何进行转换 我用的是JavaMe(准确地说是Blackberry 4.7),所以我不能用Joda时间 我需要对很多日期(但只有一个时区)快速进行此计算,因此我不能让服务器向我发送偏移量,因为偏移量可能会根据日期而变化 编辑:让我重申一下这个问题,因为似乎有些混乱。我得到了zoneinfo的名字和日期。我想知道那个时区在那个日期相对于格林尼治标准时
TimeZone zone = TimeZone.getTimeZone("America/Los_Angeles");
Calendar calendar = Calendar.getInstance();
calendar.setTimeZone(zone);
calendar.setTime(new Date(2011, 1, 1, 12, 0, 0));
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
calendar.setTime(new Date(2011, 6, 1, 12, 0, 0));
System.out.println(zone.getOffset(1, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.DAY_OF_WEEK), calendar.get(Calendar.MILLISECOND)));
J2ME不支持吗?这基本上就是您想要的,为了获得时区偏移等。我希望J2ME支持zoneinfo区域名称。可能这就是您想要的。这在我的机器上使用标准java
Calendar calendar = Calendar.getInstance();
TimeZone tz = TimeZone.getTimeZone("America/Los_Angeles");
calendar.setTimeZone(tz);
System.out.println("Offset from UTC="+tz.getOffset(calendar.getTimeInMillis())/(60*60*1000)); //prints -8
System.out.println(tz.getDisplayName(Boolean.TRUE, 0)); //prints PDT
System.out.println(tz.getDisplayName(Boolean.TRUE, 1)); //prints Pacific Daylight Time
System.out.println(tz.getDisplayName(Boolean.FALSE, 0));//prints PST
System.out.println(tz.getDisplayName(Boolean.FALSE, 1));//prints Pacific Standard Time
更新:OP说上述内容不适用于j2ME。在谷歌搜索之后,我发现getOffset()实际上是j2me中的getRawOffset()。但是,它看起来不支持displayName。我认为您唯一的选择是使用。检查id,这将为我提供id为“America/Los Angeles”的时区,无论日期如何,它都与PST完全相同。BlackBerry的时区实现支持zoneinfo名称。我认为,OP的问题在于,他收到的是时区缩写,而不是zoneinfo名称。如果黑莓无法识别缩写,则默认为GMT。不幸的是,BB模型通常不知道很多缩写。您可以使用
TimeZone.getAvailableIDs()
查看特定平台上支持的功能。@Ted:问题是OP正在获取zoneinfo名称。我还是有点困惑…@马文:你是如何确定“美国/洛杉矶”完全等同于PST的?那会让我惊讶的。你是对的,他们是不同的。我错了。谢谢你指出这一点!那太好了,但是J2ME没有时区。getDisplayName():-(我也为您添加了偏移量。它是否支持getOffset()?我以前的评论很愚蠢,所以我删除了它。getRawOffset()无法工作,因为它不带日期。J2ME只有长格式的getOffset(),这是我在上面添加的代码。因为'Amrica/Los_angeles'和'PDT'的偏移量相等!