Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#获取特定时区的午夜时间(UTC)_C#_Datetime_Timezone - Fatal编程技术网

c#获取特定时区的午夜时间(UTC)

c#获取特定时区的午夜时间(UTC),c#,datetime,timezone,C#,Datetime,Timezone,我想获取UTC中特定时区的午夜时间。例如,考虑我的本地机器时区是 +0530。请看下面的截图。我使用该网站进行转换 在上面的示例中,我在+05:30中输入午夜时间,并给出它的UTCtime 注意:我正在将我的机器时区重置为(UTC)协调世界时 这里我想找到的是UTC日期时间。为此,我存储了用户时区信息。我使用下面的代码获取时区信息 TimeZoneInfo userTz = TimeZoneInfo.FindSystemTimeZoneById(LoginSessionDO.TimeZoneI

我想获取UTC中特定时区的午夜时间。例如,考虑我的本地机器时区是<强> +0530。请看下面的截图。我使用该网站进行转换

在上面的示例中,我在+05:30中输入午夜时间,并给出它的UTCtime

注意:我正在将我的机器时区重置为(UTC)协调世界时

这里我想找到的是UTC日期时间。为此,我存储了用户时区信息。我使用下面的代码获取时区信息

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