关于c#:ConvertTimeToUtc当前时间


ConvertTimeToUtc current time

本问题已经有最佳答案,请猛点这里访问。

我喜欢将当前的日期时间存储在名为entry date的变量中。当我执行上述操作时,会收到以下消息:

1
2
3
    var tz = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");

    var EntryDate = TimeZoneInfo.ConvertTimeToUtc(DateTime.Now, tz);

我收到以下信息:

无法完成转换,因为提供的日期时间未正确设置Kind属性。例如,当kind属性为datetimekind.local时,源时区必须为timezoneinfo.local。

我试过很多方法来表示友好,但没有成功。


将代码更改为类似的格式有几种方法可以获得UTC日期这里有三种不同的方法可以获得UTC日期/时间

1
2
3
4
var locDateTimeStr = DateTime.Now.ToString();
DateTime convertedDate = DateTime.SpecifyKind(DateTime.Parse(locDateTimeStr),DateTimeKind.Utc);
var kind = convertedDate.Kind; // `Kind you are seeking`
DateTime dt = convertedDate.ToLocalTime();

1
var utcDateNow = DateTime.Now.ToUniversalTime();

1
var utcDateNow2 = DateTime.UtcNow;

不清楚你想做什么。对clr的日期/时间支持,imho,考虑得不充分。如果默认情况下提供了UTC日期和时间,那么它将有助于转换为本地表示(对于某些"本地"的定义)。那几乎是…类UNIX。但我离题了。

无论如何,这可能有助于:

  • 要获取当前即时的时间,请相对于当前时区表示:

    1
    DateTime     localNow        = DateTime.Now ;
  • 要及时获得当前的即时信息,可以说是zulu/gmt/utc(universel temps coordonn—不完全是惯用或语法正确的法语,但委员会擅长语言屠杀)。

    1
    DateTime     utcNow = DateTime.UtcNow ;

    (请注意,UTC时间是恒定的,不依赖于时区。如果您的计算机分散在世界各地并配置为本地时区

    • 东京
    • 纽约市
    • 巴黎
    • 伦敦

    他们同时执行以下代码行:

    1
    DateTime now = DateTime.UtcNow ;

    它们对now的价值完全相同。

    如果你已经有了本地的"现在",你可以说:

    1
    DateTime     utcNow = localNow.ToUniversalTime() ;

一旦你有了一个"现在"的UTC,你就可以通过说如下的话来获得时区的时间:

1
2
    TimeZoneInfo desiredTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time") ;
    DateTime     desiredLocalNow = TimeZoneInfo.ConvertTime( utcNow , desiredTimeZone ) ;

您会注意到,如果您尝试将desiredLocalNow转换为UTC,则会得到不同的UTC时间值:这是因为DateTime is **NOT** timezone-aware and itsis set todatetimekind.local. To give things timezone awareness, you'll need to usedatetimeoffset`,这两行中的某些内容:

1
2
3
4
5
6
DateTimeOffset utcNow           = DateTimeOffset.UtcNow ;
DateTimeOffset localNow         = utcNow.ToLocalTime() ;

TimeZoneInfo   desiredTimeZone  = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time") ;
DateTimeOffset desiredLocalNow1 = TimeZoneInfo.ConvertTime( localNow , desiredTimeZone ) ;
DateTimeOffset desiredLocalNow2 = TimeZoneInfo.ConvertTime( utcNow   , desiredTimeZone ) ;

希望这有帮助!


如果您试图将本地时间转换为不同的时区(从您的帖子中可以看出这一点),请使用ConvertTime

1
2
  var tz = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");  
  var EntryDate = TimeZoneInfo.ConvertTime(DateTime.Now, tz);

我不知道你想做什么。

如果需要UTC日期,直接使用DateTime.UtcNow