c#获取特定时区的午夜时间(UTC)
我想获取UTC中特定时区的午夜时间。例如,考虑我的本地机器时区是<强> +0530。请看下面的截图。我使用该网站进行转换 在上面的示例中,我在+05:30中输入午夜时间,并给出它的UTCtime 注意:我正在将我的机器时区重置为(UTC)协调世界时 这里我想找到的是UTC日期时间。为此,我存储了用户时区信息。我使用下面的代码获取时区信息c#获取特定时区的午夜时间(UTC),c#,datetime,timezone,C#,Datetime,Timezone,我想获取UTC中特定时区的午夜时间。例如,考虑我的本地机器时区是 +0530。请看下面的截图。我使用该网站进行转换 在上面的示例中,我在+05:30中输入午夜时间,并给出它的UTCtime 注意:我正在将我的机器时区重置为(UTC)协调世界时 这里我想找到的是UTC日期时间。为此,我存储了用户时区信息。我使用下面的代码获取时区信息 TimeZoneInfo userTz = TimeZoneInfo.FindSystemTimeZoneById(LoginSessionDO.TimeZoneI
TimeZoneInfo userTz = TimeZoneInfo.FindSystemTimeZoneById(LoginSessionDO.TimeZoneId);
所以,我想找到UTC中任何时区的午夜时间。我怎么能在c#中做到这一点
例如+05:30-2018-07-07 00:00:00 UTC-2018-07-06 18:30:00
对不起,没有回答这个问题。我会解释我的情况
编辑:-
我已经在包含dateofactivity
列的sqlserver
表中存储了一些用户的活动数据。所有记录的日期时间都存储在UTC中。所以在前端,我想从午夜(天开始的时候)获取用户今天的所有活动记录。如果用户在+05:30
时区,他想获取所有2018年7月7日00:00:00记录,那么我需要通过2018年7月6日18:30:00。现在假设另一个用户在欧洲/阿姆斯特丹(CEST)GMT+02:00因此,希望以UTC为单位查找欧洲/阿姆斯特丹的午夜时间。现在以UTC为单位查找日期时间:
DateTime.UtcNow()
解析到UTC:
DateTime.Parse("2018-05-08 12:00:00").ToUniversalTime()
解析到当地时间:
DateTime.Parse("2018-05-08 00:00:00").ToLocalTime()
另外,如果您只查找偏移量,请参见此处-使用
DateTimeOffset
它采用DateTime
和TimeSpan
作为偏移量,您可以将其用作时区,并具有ToUniversalTime
方法
还有一些很好的文档介绍了此主题:
在您当地时区的午夜时间,获取您所在时区的时区信息,然后致电
ConvertTimeToUtc
var tz = TimeZoneInfo.FindSystemTimeZoneById("Sri Lanka Standard Time");
var midnight = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Unspecified);
var converted = TimeZoneInfo.ConvertTimeToUtc(midnight, tz);
Console.WriteLine(midnight); //2000-01-01 00:00:00
Console.WriteLine(converted);//1999-12-31 18:30:00
午夜是00:00,所以只需从午夜减去时区偏移量,这就是UTC时间,当它是午夜时,无论您以UTC开始的时区是什么,它都不是一种格式,而是一个时区。“我真的不明白你在问什么。”佐哈普勒为这个未澄清的问题感到抱歉。如果用户在任何时区,我希望该时区的午夜时间为UTC。请看我的最后一个例子。@Dave如何使用c#?@Dave仅使用utc偏移量是行不通的,因为时区中还包括夏季/冬季(夏令时)时间。因此,UTC的时区偏移量在一年中可能不同。日期时间对象不知道时区。他们有一种本地,UTC或none,但local不包含创建时本地时区的信息。这使得这个答案在中非常脆弱。我的观点这并没有回答问题,因为它没有使用特定的时区。我试过你的代码。它给了我
07-07-2018 05:30:00
,这是错误的。我将时区设置为+05:30。因此,根据这个时区,我希望06-07-2018 18:30:00
不要使用StandardName
作为Id
的替代品。它们由操作系统语言本地化,并不总是匹配。此外,您已经有了一个TimeZoneInfo
,因此您可以使用ConvertTimeToUtc
并将其作为参数传递。此外,当您使用DateTimeKind.Unspecified
传递一个DateTime
到ConvertTimeBySystemTimeZoneId
时,它假定该值反映了本地时区。结果还将具有DateTimeKind.Unspecified
,当调用.ToUniversalTime()
时,它将再次假定为本地。因此,您的代码实际上是从本地时间转换为东部时间,然后忽略它是东部时间,再次从本地时间转换为通用时间。在大多数情况下,它不会给出正确的结果。根据日期的不同,时区内的偏移量可能会有所不同。请参见中的“时区!=偏移”。为了首先创建正确的DateTimeOffset
,必须事先知道特定的偏移量,或者从另一个函数派生它。
var tz = TimeZoneInfo.FindSystemTimeZoneById("Sri Lanka Standard Time");
var midnight = new DateTime(2000, 1, 1, 0, 0, 0, DateTimeKind.Unspecified);
var converted = TimeZoneInfo.ConvertTimeToUtc(midnight, tz);
Console.WriteLine(midnight); //2000-01-01 00:00:00
Console.WriteLine(converted);//1999-12-31 18:30:00