JavaScript
如果你想用 Javascript 来做,有多个库。我最熟悉moment.js,但它们已被弃用,这意味着如果您正在处理一个新项目,您可能需要使用另一个库。
List of suggested libraries by moment.js.
无论如何,如果您希望使用时刻并转换为时区,您可以使用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的列表