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

将PST时间转换为GMT

司寇书
2023-03-14

我正在尝试将pst时间戳转换为Java的gmt

我有一个时间戳为2021-03-23T22:00:00.669-07:00的字符串。我如何处理该字符串并将其转换为gmt时间戳?

2021-03-24T05:03:00.669Z

我做了一些我想做的事,但还没去任何地方

//Date date = new Date(str);
      
String s = str;
DateFormat pstFormat = new SimpleDateFormat();
DateFormat gmtFormat = new SimpleDateFormat();
TimeZone gmtTime = TimeZone.getTimeZone("GMT");
TimeZone pstTime = TimeZone.getTimeZone("PST");
      
pstFormat.setTimeZone(gmtTime);
gmtFormat.setTimeZone(pstTime);
System.out.println("GMT Time: " + pstFormat.format(s));
System.out.println("PST Time: " + gmtFormat.format(s));

结果是java.lang.IllegalArgumentException:无法将给定对象格式化为日期:

System.out.println("GMT Time: " + pstFormat.format(s));

共有1个答案

羊时铭
2023-03-14
OffsetDateTime
.parse( "2021-03-23T22:00:00.669-07:00" ) 
.toInstant()
.toString()

永远不要使用那些可怕的日期-时间类simpledateformatdatetimezone。多年前被JSR310中定义的现代java.time类所取代。

您的输入带有与UTC的偏移量为负七小时。因此解析为offsetdatetime

OffsetDateTime odt = OffsetDateTime.parse( "2021-03-23T22:00:00.669-07:00" ) ;
Instant instant = odt.toInstant() ;
String output = instant.toString() ;

您的输入和所需输出均符合ISO 8601标准。java.time类在解析/生成文本时默认使用这些标准格式。因此不需要指定格式模式。

切勿使用2-4个字母的伪区,如PST。使用大陆/地区格式的实时区域名称,如美国/LOS_Angeles。再者,与你的第一句相反,你的输入并不代表特定时区的一个时刻。多个时区在那一刻可能共享-07:00的偏移量,因此无法知道您的数据源打算使用哪一个时区。

 类似资料:
  • 我有一个日期字符串 如何将UTC格式转换为以下格式 我试过这个 使用Python2.7进行编辑。 然后按照建议使用Z格式化

  • 我如何将日期时间转换为PST取决于他们在哪里(东部时间或格林尼治时间),并考虑到白天光节省。 任何帮助将是感激的。 谢谢你

  • 问题内容: 我有一个UTC时间(纪元Unix时间),其格式设置为时间戳,如下所示。 (人类可读的值:2017年5月31日09:57:00) 我需要将格式化为Unix时间的时间戳转换为GPS时间格式,如下所示。 (人类可读的值:2017年5月31日09:57:00) 我需要一个python程序(算法对我来说很好)将Unix时间格式的时间戳转换为GPS时间格式的时间戳。 有一个PHP程序可以这样做。我

  • 问题内容: 我需要将(在ec2实例上)UTC时间转换为PST。我正在尝试这样做。 但是输出是: 为什么我没有得到正确的PST时间? 问题答案: 似乎对我有用:)-时区令人迷惑,慢慢地制定一个我实际上想做的事情的计划在大多数时候对我有帮助

  • 我正在研究JavaScript。我的时间以毫秒计。所以我必须以PST时区显示时间。我试过GMT。但是是否有任何选项可以显示PST格式的时间,其中输入是以毫秒为单位的,如1671673550214。因此我正在尝试将该毫秒转换为PST的时间和日期格式。与下面的代码相同。恳求帮忙。下面是我试过的代码: 我甚至尝试过使用UTCString()、UTC()和toString();但事情正在被转换成GMT而不

  • 问题内容: 我已经尝试过一百万种不同的方法,但是没有用。任何帮助将非常感激。 上面的方法不起作用。 基本上,我想做的是获取纪元时间并将其转换为澳大利亚时间。我的当地时间是+05.30,但是我当然不希望这成为促成这种转化的因素。 编辑- 当我运行您的确切代码时,输​​出 时代1318388699000 2011年10月12日星期三08:34:59 GMT + 05:30 12/10/2011 03: