当前位置: 首页 > 知识库问答 >
问题:

JavagetTimeZone()对不同类型的输入有不同的行为

滕项明
2023-03-14

对于下面的代码,我得到了不同的输出

TimeZone t = TimeZone.getTimeZone("GMT-8");  // Also tried UTC-8 and GMT-8:00
//TimeZone t = TimeZone.getTimeZone("America/Los_Angeles"); 
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy");
Date d = null;

Calendar c = Calendar.getInstance(t);
c.set(Calendar.MONTH, Calendar.AUGUST);
c.set(Calendar.DAY_OF_MONTH, 22);
c.set(Calendar.YEAR, 2013);
d = c.getTime();

String s = sdf.format(d);
System.out.println(s + "        " + t.inDaylightTime(d));

输出为:

08/22/2013      false

现在美国/洛杉矶是GMT-8/UTC-8或PST。但当我将参数从GMT-8改为America/Los_Angeles时,

输出为:

08/22/2013      true

不能使用类似PST的缩写,因为它已被弃用。同时,CST可以指中央标准时间和中国标准时间。

我的输入是-8、-9-14等,我希望在GMT/UTC之前知道我是否可以在给定日期获得DST激活。

请在这方面指导我。

共有2个答案

吴英武
2023-03-14

正如@iTech所解释的那样,结果是正确的。只需添加,您可以查找可用的时区ID,如下所示:

import java.util.TimeZone;

public class TimeZones {
    public static void main(String[] args) {
        String[] timezones = TimeZone.getAvailableIDs();
        System.out.println(timezones.length);
        for (String t : timezones) {
            System.out.println(t);  
        }
    }
}

这将打印一长串可用的600个时区。

然后,您可以获取缩写的显示名称,如下所示

System.out.println(TimeZone.getTimeZone("IST").getDisplayName());
吕学
2023-03-14

结果是正确的,当您用偏移量指定GMT时,无法知道这是哪个国家/城市,因此无法确定白昼时间是否处于活动状态。

因此,对于使用GMT和偏移量指定的所有时区,inDaylight Time()将是false

在Java中,CST是中央标准时间,您可以通过这行代码进行检查:

System.out.println(TimeZone.getTimeZone("CST").getDisplayName());

中国标准时间Java区域ID为CTT

编辑

考虑使用Joda time and date API获取更多最新的时区信息

 类似资料:
  • 想象一下下面的scanario:我有一个程序,它要求输入一个整数,然后是一个String输入。 根据aobe代码,我没有机会输入姓名。因此,通常我会声明2个扫描仪对象,如下所示: 我的问题是:有必要声明多个扫描仪对象来接受不同类型的输入吗??我这样做是正确的吗? 我已经考虑这个问题很多年了。(SO中的几个问题提到了多扫描仪,但他们的问题只使用了一个扫描仪对象,所以我今天问这个问题。)

  • 问题内容: 我是android和java的初学者。我不明白什么时候对象传递。对象传递当然需要实现Serializable。 0.什么时候使用Serializable?它是什么? 1.什么是对象和捆绑类 2.使用Object和Bundle传递对象时 3.是否支持Object和Bundle对象都是数据类型的对象? 请帮助我。谢谢 问题答案: 您的要求确实很模糊,但是可序列化的对象可以转换为可以反序列化

  • 我需要编写一个java方法来从一个对象中获取特定的信息。但是,该对象可以是A类型的,也可以是B类型的。下面是我的代码的一部分: 当我这样写它时,它会引发一个错误,说“重复方法”。我怎么才能让这个起作用?

  • 我有一个这样的方法,它通常用于返回。 在最后一行,我从Pylance那里得到了以下信息: (方法)is_file:()- 有没有一种方法可以正确地键入提示这种情况,以便Pylance知道是?或者我应该让它总是返回路径,并有另一个方法调用将输出转换为字符串,然后返回? 谢谢 编辑1 我刚刚意识到另一个更常见的场景: 在熊猫中,输入参数可以改变输出类型,Pylance也不能处理这个问题。Pylance

  • 下面,我有一个全局应用的日志回溯配置。 我想全局使日志记录级别错误,除了一个类。对于一个特定的类,我想使日志记录级别 INFO。我该怎么做?

  • 而输出是 谁能详细说明一下1380605909318和61341428160000之间的区别?