Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换;“美国/洛杉矶”;时区至;PST“;或;PDT“;用Java编写_Java_Blackberry_Date_Java Me_Timezone - Fatal编程技术网

转换;“美国/洛杉矶”;时区至;PST“;或;PDT“;用Java编写

转换;“美国/洛杉矶”;时区至;PST“;或;PDT“;用Java编写,java,blackberry,date,java-me,timezone,Java,Blackberry,Date,Java Me,Timezone,我的服务器向我发送“美国/洛杉矶”格式的时区。在客户端上,我需要在该时区中显示一个时间。答案将是“PST”或“PDT”,具体取决于给定时间的夏令时。我如何进行转换 我用的是JavaMe(准确地说是Blackberry 4.7),所以我不能用Joda时间 我需要对很多日期(但只有一个时区)快速进行此计算,因此我不能让服务器向我发送偏移量,因为偏移量可能会根据日期而变化 编辑:让我重申一下这个问题,因为似乎有些混乱。我得到了zoneinfo的名字和日期。我想知道那个时区在那个日期相对于格林尼治标准时

我的服务器向我发送“美国/洛杉矶”格式的时区。在客户端上,我需要在该时区中显示一个时间。答案将是“PST”或“PDT”,具体取决于给定时间的夏令时。我如何进行转换

我用的是JavaMe(准确地说是Blackberry 4.7),所以我不能用Joda时间

我需要对很多日期(但只有一个时区)快速进行此计算,因此我不能让服务器向我发送偏移量,因为偏移量可能会根据日期而变化

编辑:让我重申一下这个问题,因为似乎有些混乱。我得到了zoneinfo的名字和日期。我想知道那个时区在那个日期相对于格林尼治标准时间的偏移量。答案因夏令时而异

作为额外的好处,我想让TLA向用户显示(即“PST”或“PDT”),但这是次要的

解决方案:我将在这里总结解决方案,因为从下面的答案中看不太清楚。在J2ME中,这基本上满足了我的需要:

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'的偏移量相等!