如果PC本地时间错误,如何使时区日期时间正确

时间:2017-10-19 11:07:56

标签: c# timezone

如何获得带有时区信息的日期时间(GMT / UTC +7)?

让我们在实时中说06:00 PM,然后有人将本地PC时间改为01:00 PM。如何获取日期时间06:00 PM

我试过这个:

System.Globalization.CultureInfo.CurrentCulture.ClearCachedData();
DateTime utcTime = DateTime.UtcNow;
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("SE Asia Standard Time");
DateTime localTime = TimeZoneInfo.ConvertTimeFromUtc(utcTime, tzi);
Console.WriteLine(localTime);

但我仍然有01:00 PM

2 个答案:

答案 0 :(得分:3)

只需联系NTP服务器并花点时间。 Code found on stackoverflow。你当然需要互联网连接。

editUserAge(age) {
  this.setState((prevState) => {
    let newUser = Object.assign({}, prevState.user, {age: age});
    return { user: newUser };
  });
}

答案 1 :(得分:1)

如果您根本不想信任用户电脑上的信息,则需要:

  1. 时区数据的备用来源
  2. 网络时间源,例如通过NTP
  3. 您可以使用Noda Time获得第一个,使用我的NodaTime.NetworkClock插件获得第二个。在内部,它使用与Martin's answer给出的类似的NTP代码。

    public static DateTime GetRealTimeInZone(string timeZoneId)
    {
        var clock = NetworkClock.Instance;
        var now = clock.GetCurrentInstant();
        var tz = DateTimeZoneProviders.Tzdb[timeZoneId];
        return now.InZone(tz).ToDateTimeUnspecified();
    }
    

    用法:

    DateTime dt = GetRealTimeInZone("Asia/Bangkok");
    

    或者,如果您确实信任本地时区设置,而不是时钟,那么:

    public static DateTime GetRealTimeInZone()
    {
        var clock = NetworkClock.Instance;
        var now = clock.GetCurrentInstant();
        var tz = DateTimeZoneProviders.Tzdb.GetSystemDefault();
        return now.InZone(tz).ToDateTimeUnspecified();
    }
    

    用法:

    DateTime dt = GetRealTimeInZone();