【问题标题】:C# asp.net core 2.2 - Get current date time - Not AccurateC# asp.net core 2.2 - 获取当前日期时间 - 不准确
【发布时间】:2020-03-24 08:36:49
【问题描述】:

我尝试了一切来获取当前的年/月/日/小时,但它不起作用。我总是在 1 小时后获得数据。因此,如果在荷兰是 17:00,我会得到 16:00。我已经尝试了很多东西,但我无法解决这个问题..这是一个错误吗?

我试过这个:

string dateTimeNowPlusForecaseHour = DateTimeOffset.Now.ToLocalTime().AddHours(hour).ToString("yyyyMMddhh"); 

还有这个:

string dateTimeNowPlusForecaseHour = DateTimeOffset.UtcNow.ToLocalTime().AddHours(hour).ToString("yyyyMMddhh");

还有这个:

string dateTimeNowPlusForecaseHour = DateTimeOffset.UtcNow.ToLocalTime().AddHours(hour).ToString("yyyyMMddhh");

还有这个:

string dateTimeNowPlusForecaseHour = DateTimeOffset.Now.AddHours(hour).ToString("yyyyMMddhh"); 

还有这个:

        public string GetForecastTime(int hour)
    {
        // Take amount of seconds elapsed since 1970
        var amountOfSecondsElapsedSince1970 = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();

        // Make a Datetime variable (1970 is the start)
        System.DateTime dateTimeNowString = new DateTime(1970, 1, 1, 1, 0, 0, 0, System.DateTimeKind.Utc);

        // Add amountOfSecondsElapsedSince1970 to the date time starting at 1970, + the amount of hours (for each forecast so 0, 1, and 2)
        dateTimeNowString = dateTimeNowString.AddSeconds(amountOfSecondsElapsedSince1970).AddHours(hour).ToLocalTime();

        // This is the dateTime
        string dateRealWeatherForecastTimee = dateTimeNowString.ToString("yyyyMMddhh");

        return dateRealWeatherForecastTimee;
    }

似乎没有任何效果。

更新

我在一个新的 asp.net 核心控制台项目(而不是我正在处理的项目)上尝试了以下行:

    string dateTimeNowPlusForecaseHour = DateTime.Now.AddHours(hour).ToString("yyyyMMddhh");

这行得通!但为什么它不适用于我正在从事的项目呢?

更新2.0: 当我查看项目的时区时,我得到了错误的 GMT。当我创建一个新的 asp.net 核心控制台项目并查看时区时,我得到 w。欧洲,这给了我正确的时间......为什么时区错误?那不应该自动正确吗?

【问题讨论】:

    标签: datetime .net-core utc datetimeoffset


    【解决方案1】:

    DateTime.Now 返回当前时间和日期。它返回的结构 可以存储为类中的字段或属性。我们对此进行调查 属性及其实现——访问操作系统的地方 当前时间。

    string dateTimeNowPlusForecaseHour = DateTime.Now.ToString("yyyyMMddHH");
    

    【讨论】:

    • 但是为什么这对我不起作用?我仍然得到不正确的时间.. 它是一个 asp.net 核心错误吗?
    • no no,验证您的计算机时间或服务器日期时间。现在获取系统的当前日期(计算机,服务器)
    • 在您的计算机中验证您的时区配置
    • 我确实验证过了,很正常。但是如果我打开一个新项目,一个.net核心控制台项目,那么它就可以工作了......
    • 时区是GMZ,这是错误的..但是当我创建一个新项目时,时区是w。欧洲,它显示了正确的时间!!为什么我正在从事的项目的时区错误?
    【解决方案2】:

    此截图取自here。我已经使用了几乎所有这些,这意味着这些都经过测试并且肯定可以工作。如果您仍然得到不正确的时间,请检查您托管应用程序的服务器的时区。

    【讨论】:

    • 主机和我的开发环境(我的电脑)的时间不正确,因此在这两个环境中都是如此。我有一种感觉是因为这个项目,因为如果我创建一个新的 .net 核心项目,我会得到正确的时间......
    • 您可以通过以下方式获取项目的当前时区: TimeZone localZone = TimeZone.CurrentTimeZone;如果您想了解您的开发环境正在使用哪个时区,请参阅以下链接了解详细信息,docs.microsoft.com/en-us/dotnet/api/…
    • 感谢您的回复,它显示的是格林威治标准时间,但我在荷兰,所以这是错误的,但为什么它使用那个时区,为什么不使用我自己的时区?因为当您使用 DateTime.Now 时,它应该基于您当地的时区吧?
    • 另外,当我创建一个新的 asp.net 核心控制台项目时,它显示 w。欧洲作为时区,这是正确的!为什么它不动态决定在我的主项目中使用哪个时区..
    • 是的,Datetime.Now 根据您当地的时区返回值。你的主要项目不使用你当地的时区真的很奇怪。更好的方法是不依赖 Datetime.Now。相反,请选择 DateTime.UtcNow。更多细节在这里:blog.submain.com/4-common-datetime-mistakes-c-avoid
    猜你喜欢
    • 1970-01-01
    • 2011-10-18
    • 2020-01-09
    • 2017-05-02
    • 2012-12-04
    • 2017-05-06
    • 1970-01-01
    • 2013-03-10
    相关资源
    最近更新 更多