如何使用"Romance Standard Time"设置时区?
How can use "Romance Standard Time" to set the time zone?
我有 UTC 日期字符串 "2022-01-06T13:35:00Z"
和时区字符串 "Romance Standard Time"
。如何在 JavaScript(在浏览器中)中使用该时区字符串,以便我可以将时间更正为 14:35
?
到目前为止我找到的时区库使用 IANA 时区,例如"Europe/Copenhagen"
,因此可以将 "Romance Standard Time"
转换为 "Europe/Paris"
之类的库也可以回答我的问题。这种转换是在 .NET 中完成的,而不是 JavaScript.
是可以接受的
JavaScript
如果你想用Javascript来做,有多个图书馆。我最熟悉 moment.js,但它们已被弃用,这意味着如果您正在处理一个新项目,您可能想使用另一个库。
List of suggested libraries by moment.js.
无论如何,如果您希望使用 moment 并转换为时区,您可以使用 Moment-Timezone. All supported timezones.
轻松实现
例如:
const moment = require('moment-timezone');
const timeZone = "Europe/Paris";
const ISOString = "2022-01-06T13:35:00Z"; //2022-01-06T13:35:00Z
const momentDefault = moment(ISOString).format(); //2022-01-06T14:35:00+01:00
const momentTz = moment.utc(ISOString).tz(timeZone).format(); //2022-01-06T14:35:00+01:00
如您所见,moment 默认获取时区并将 ISOString 处理为 UTC 值,因此它会自动将该值转换为客户端用户的时区。
您仍然可以明确告诉 moment 将 ISOString 作为 UTC ISOString 处理,然后将其转换为您定义的特定时区。这样,客户端的时区将被忽略。
编辑:
现在我意识到发问者想在将时区从 Windows 转换为 Iana 之前将其转换为 Javascript,因为包括 Moment.js 在内的大多数库都不支持 windows 时区 ID。
我找到了一个不错的图书馆 here。
下面是一个如何先转换时区然后使用 moment.js 的例子。
import { findIana } from 'windows-iana';
const moment = require('moment-timezone');
const result = findIana('Romance Standard Time');
console.log(result); // ['Europe/Paris', 'Europe/Brussels', 'Europe/Copenhagen', 'Europe/Madrid', 'Africa/Ceuta']
const timeZone = result[0]; //doesn't really matter which one to take, if you are just converting the times.
const ISOString = "2022-01-06T13:35:00Z"; //2022-01-06T13:35:00Z
const momentDefault = moment(ISOString).format(); //2022-01-06T14:35:00+01:00
const momentTz = moment.utc(ISOString).tz(timeZone).format(); //2022-01-06T14:35:00+01:00
.NET C#
要在 C# 中将时间转换为特定时区,您不需要任何额外的包,您可以简单地按以下方式进行:
var isoString = "2022-01-06T13:35:00Z";
var utcDate= DateTime.Parse(isoString);
var timeZone = "Romance Standard Time";
var date = TimeZoneInfo.ConvertTime(utcDate, TimeZoneInfo.FindSystemTimeZoneById(timeZone)); //01/06/2022 14:35:00
在这里您可以找到 all supported timezoneIds
的列表
关键是要了解 "Romance Standard Time"
是 Windows 时区 ID。其他人都使用 IANA 时区 ID。他们有 region/city 格式,例如"Europe/Copenhagen"
.
在 .NET 6 中,可以在格式之间进行转换。这是来自 Date, Time, and Time Zone Enhancements in .NET 6.
的代码示例
// Conversion from Windows to IANA when a region is unknown.
string windowsTimeZoneId = "Eastern Standard Time";
if (!TimeZoneInfo.TryConvertWindowsIdToIanaId(
windowsTimeZoneId, out string ianaTimeZoneId))
{
throw new TimeZoneNotFoundException(
$"No IANA time zone found for "{windowsTimeZoneId}".");
}
Console.WriteLine($"{windowsTimeZoneId} => {ianaTimeZoneId}");
// "Eastern Standard Time => America/New_York"
// Conversion from Windows to IANA when a region is known.
string windowsTimeZoneId = "Eastern Standard Time";
string region = "CA"; // Canada
if (!TimeZoneInfo.TryConvertWindowsIdToIanaId(
windowsTimeZoneId, region, out string ianaTimeZoneId))
{
throw new TimeZoneNotFoundException(
$"No IANA time zone found for "{windowsTimeZoneId}" in "{region}".");
}
Console.WriteLine($"{windowsTimeZoneId} + {region} => {ianaTimeZoneId}");
// "Eastern Standard Time + CA => America/Toronto"
如果您使用的是早期版本的 .NET,则可以使用 TimeZoneConverter. Here's a complete list of the time zones in case you need to build your own converter: windowsZones.json。
这个问题的答案建议使用 NodaTime,所以这也可能是一种可能性:
我有 UTC 日期字符串 "2022-01-06T13:35:00Z"
和时区字符串 "Romance Standard Time"
。如何在 JavaScript(在浏览器中)中使用该时区字符串,以便我可以将时间更正为 14:35
?
到目前为止我找到的时区库使用 IANA 时区,例如"Europe/Copenhagen"
,因此可以将 "Romance Standard Time"
转换为 "Europe/Paris"
之类的库也可以回答我的问题。这种转换是在 .NET 中完成的,而不是 JavaScript.
JavaScript
如果你想用Javascript来做,有多个图书馆。我最熟悉 moment.js,但它们已被弃用,这意味着如果您正在处理一个新项目,您可能想使用另一个库。
List of suggested libraries by moment.js.
无论如何,如果您希望使用 moment 并转换为时区,您可以使用 Moment-Timezone. All supported timezones.
轻松实现例如:
const moment = require('moment-timezone');
const timeZone = "Europe/Paris";
const ISOString = "2022-01-06T13:35:00Z"; //2022-01-06T13:35:00Z
const momentDefault = moment(ISOString).format(); //2022-01-06T14:35:00+01:00
const momentTz = moment.utc(ISOString).tz(timeZone).format(); //2022-01-06T14:35:00+01:00
如您所见,moment 默认获取时区并将 ISOString 处理为 UTC 值,因此它会自动将该值转换为客户端用户的时区。
您仍然可以明确告诉 moment 将 ISOString 作为 UTC ISOString 处理,然后将其转换为您定义的特定时区。这样,客户端的时区将被忽略。
编辑: 现在我意识到发问者想在将时区从 Windows 转换为 Iana 之前将其转换为 Javascript,因为包括 Moment.js 在内的大多数库都不支持 windows 时区 ID。
我找到了一个不错的图书馆 here。
下面是一个如何先转换时区然后使用 moment.js 的例子。
import { findIana } from 'windows-iana';
const moment = require('moment-timezone');
const result = findIana('Romance Standard Time');
console.log(result); // ['Europe/Paris', 'Europe/Brussels', 'Europe/Copenhagen', 'Europe/Madrid', 'Africa/Ceuta']
const timeZone = result[0]; //doesn't really matter which one to take, if you are just converting the times.
const ISOString = "2022-01-06T13:35:00Z"; //2022-01-06T13:35:00Z
const momentDefault = moment(ISOString).format(); //2022-01-06T14:35:00+01:00
const momentTz = moment.utc(ISOString).tz(timeZone).format(); //2022-01-06T14:35:00+01:00
.NET C#
要在 C# 中将时间转换为特定时区,您不需要任何额外的包,您可以简单地按以下方式进行:
var isoString = "2022-01-06T13:35:00Z";
var utcDate= DateTime.Parse(isoString);
var timeZone = "Romance Standard Time";
var date = TimeZoneInfo.ConvertTime(utcDate, TimeZoneInfo.FindSystemTimeZoneById(timeZone)); //01/06/2022 14:35:00
在这里您可以找到 all supported timezoneIds
的列表关键是要了解 "Romance Standard Time"
是 Windows 时区 ID。其他人都使用 IANA 时区 ID。他们有 region/city 格式,例如"Europe/Copenhagen"
.
在 .NET 6 中,可以在格式之间进行转换。这是来自 Date, Time, and Time Zone Enhancements in .NET 6.
的代码示例// Conversion from Windows to IANA when a region is unknown.
string windowsTimeZoneId = "Eastern Standard Time";
if (!TimeZoneInfo.TryConvertWindowsIdToIanaId(
windowsTimeZoneId, out string ianaTimeZoneId))
{
throw new TimeZoneNotFoundException(
$"No IANA time zone found for "{windowsTimeZoneId}".");
}
Console.WriteLine($"{windowsTimeZoneId} => {ianaTimeZoneId}");
// "Eastern Standard Time => America/New_York"
// Conversion from Windows to IANA when a region is known.
string windowsTimeZoneId = "Eastern Standard Time";
string region = "CA"; // Canada
if (!TimeZoneInfo.TryConvertWindowsIdToIanaId(
windowsTimeZoneId, region, out string ianaTimeZoneId))
{
throw new TimeZoneNotFoundException(
$"No IANA time zone found for "{windowsTimeZoneId}" in "{region}".");
}
Console.WriteLine($"{windowsTimeZoneId} + {region} => {ianaTimeZoneId}");
// "Eastern Standard Time + CA => America/Toronto"
如果您使用的是早期版本的 .NET,则可以使用 TimeZoneConverter. Here's a complete list of the time zones in case you need to build your own converter: windowsZones.json。
这个问题的答案建议使用 NodaTime,所以这也可能是一种可能性: