angular Datepipe格式化时区-当冬季时间转换为夏季时间时,日期不正确

2mbi3lxu  于 6个月前  发布在  Angular
关注(0)|答案(6)|浏览(65)

Which @angular/* package(s) are the source of the bug?

common

Is this a regression?

Yes

Description

In the date when was changed winter time to summer time, the formating for specific hour(01:00 is the same like 02:00 ) does not work correctly..
My timezone in windows is UTC+1 - Prague - here the datepipe does not work correctly.. If I set it in windows timezone UTC, it is ok...
toISOString | UTC | +0000 | +0060
2022-03-27T00:00:00.000Z | 3/27/22, 12:00 AM | 3/27/22, 12:00 AM | 3/27/22, 1:00 AM
2022-03-27T01:00:00.000Z | 3/27/22, 1:00 AM | 3/27/22, 1:00 AM | 3/27/22, 3:00 AM
2022-03-27T02:00:00.000Z | 3/27/22, 3:00 AM | 3/27/22, 3:00 AM | 3/27/22, 3:00 AM
2022-03-27T03:00:00.000Z | 3/27/22, 3:00 AM | 3/27/22, 3:00 AM | 3/27/22, 4:00 AM
2021-03-28T00:00:00.000Z | 3/28/21, 12:00 AM | 3/28/21, 12:00 AM | 3/28/21, 1:00 AM
2021-03-28T01:00:00.000Z | 3/28/21, 1:00 AM | 3/28/21, 1:00 AM | 3/28/21, 3:00 AM

gtlvzcf8

gtlvzcf81#

这是因为参数“timezone”目前只接受UTC偏移量,而不是实际的时区。由于夏令时(DST),提供这个偏移量目前是没有意义的。目前有一个拉取请求(Pull Request),它允许提供一个时区名称而不是一个偏移量。

rwqw0loc

rwqw0loc2#

你可以使用以下代码将UTC时间加上1小时偏移量:

{{date | date:'short' :'UTC+1h'}}

这将返回格式化后的UTC时间,例如:

2022-03-27T03:00:00.000Z | 3/27/22, 3:00 AM
gfttwv5a

gfttwv5a3#

问题是,目前默认的Angular DatePipe与时区一起使用会改变提供的日期,通过添加1970年1月1日(+01:00)与计算机本地时区的时区偏移量之间的差异(在冬季提供的时间是60分钟,夏季是120分钟)。
这意味着DatePipe在夏令时(DST)时会出现错误。
目前,您需要使用自己的DatePipe,该DatePipe使用Intl API或类似moment-timezone的内容。
顺便说一下,这个方法可以正常工作:
{{date.toLocaleString(undefined, {timeZone: "Etc/GMT-1"})}}

cwxwcias

cwxwcias4#

我正在使用自己的datepipe,所以当我测试它时:

date.toLocaleString(undefined, {timeZone: "Etc/GMT-1"})

对我来说是有效的。日期现在是正确的。但是我需要设置一个datetimeformat,因为:

  1. 目前我为瑞典语本地化使用瑞典语格式,为芬兰语本地化使用芬兰语格式和英语本地化。
  2. 这两种本地化仅用于日期格式。
  3. 日期+时间格式
  4. 不带秒数的日期+时间格式
    我没有找到可以在date.toLocaleString(undefined, {timeZone: "Etc/GMT-1"})中设置格式的方法。同时,要使用第一个参数也是不可能的,因为本地字符串无法实现,因为我需要芬兰语格式来满足芬兰语和英语本地化的需求。
    对我来说,使用moment的解决方案是可行的:
return moment(value).utcOffset(60).format(format)
pqwbnv8z

pqwbnv8z5#

刚刚遇到了同样的问题...
在格式Date的这个点上,确实会考虑基于计算机的时区偏移量。

htzpubme

htzpubme6#

请随时订阅 #54470 以获取有关该主题的任何更新。我们目前正在调查使用 Intl API 进行日期格式化。

相关问题