【发布时间】:2021-12-26 08:56:25
【问题描述】:
我想强制客户端(web、android、ios)仅在 UTC/GMT 时间发送 API。
这意味着他们获取用户的本地时间(使用任何方法),将其转换为 UTC/GMT,然后将其发送到 API。
我想拒绝任何不在 UTC/GMT 中的日期时间参数。
在 JavaScript 中,我可以通过这种方式获取 UTC:
new Date().toUTCString() 给出了这个结果:
'格林威治标准时间 2021 年 11 月 15 日星期一 04:26:38'
然后我将此字符串发送到 API:
[HttpGet]
public object Parse(string clientDateTime)
{
var date = DateTime.Parse(clientDateTime);
return new
{
ParsedDate = date,
Kind = date.Kind.ToString()
};
}
但是,我看到 .NET 将此日期时间解析为 Local 而不是 Utc。尽管字符串包含 GMT。
如何检查传入的日期时间并确保它是 UTC/GMT?
【问题讨论】:
-
您可以使用 DateTime.Parse(clientDateTime).ToUniversalTime() 将本地转换为 utc。
-
不,那应该没有必要。这可能会根据偏移量和服务器的本地时间更改日期时间。我错了吗?
-
是的,你是对的,如果这个 DateTime 是非本地的,那么你应该使用 TimeZoneInfo.ConvertTimeToUtc(DateTime, TimeZoneInfo)
标签: javascript c# .net-core