gpt4 book ai didi

c# - 您好,我正在尝试在 Azure 应用程序服务中运行 Web 作业,但它抛出与日期时间相关的错误

转载 作者:行者123 更新时间:2023-12-03 04:56:49 24 4
gpt4 key购买 nike

我在Azure应用程序服务中运行一个Web作业,它将获取当前日期时间并执行一些操作。但是当我在本地计算机中运行它时,它工作正常(我正在使用 .Net 控制台应用程序创建一个 webjob)。一旦我尝试将它作为 Webjob 运行,我就会收到此错误。

Unhandled Exception: System.FormatException: String was not recognized as a valid DateTime.
System.DateTimeParse.Parse(String s, DateTimeFormatInfo dtfi, DateTimeStyles styles)
System.Convert.ToDateTime(String value)

更多详情请查看下面的代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.SqlClient;
using System.Net;
using System.IO;

namespace Zoho_API_Services
{
class Items
{
#region DateTime
public DateTime datetime { get; set; }
public static DateTime Current_time { get; set; }
public static DateTime Target_time { get; set; }

//Constructor to get current date time
public Items()
{
datetime = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"));
}
#endregion

public static void Main()
{
//Call the constructor
Items obj = new Items();

//Initialize Current time and Target time
Current_time = obj.datetime;
Target_time = Current_time.AddMinutes(55);

if (Current_time >= Target_time)
{
//Reset the Current time and Target time
Current_time = obj.datetime;
Target_time = Current_time.AddMinutes(55);

// Do something
}

else
{
// Do Something
}

Console.ReadKey();
}

}
}

调用构造函数时抛出错误。请帮忙

最佳答案

这行代码有几个问题:

datetime = DateTime.Parse(DateTime.Now.ToString("dd/MM/yyyy hh:mm:ss"));
  • DateTime.Now 使用系统的本地时区。在云中,默认为 UTC。

    • 由于您使用的是 Azure Web 作业,因此您可以设置 WEBSITE_TIME_ZONE 应用设置,但仅限于 Windows。如果您在 Linux 上运行,这将不起作用。
    • 更好的选择是使用 DateTime.UtcNow,然后根据需要使用 TimeZoneInfo.ConvertTime 转换为特定时区。
  • 在字符串格式中,您使用的是 hh,它表示 12 小时制的 1-12 小时。因此,如果时间是 13:00 或更晚,解析时就会损失 12 个小时。 HH 表示 24 小时制的小时数。

  • 在字符串格式中,您使用的是 dd/MM/yyyy 日期格式。这可能是您的本地格式,但默认情况下,在 Azure 中,CurrentCultureInvariantCulture,它使用 MM/dd/yyyy 格式。您收到此错误是因为您尝试通过将 15 视为一个月来解析类似 15/04/2021 的值,该值超出了范围。

  • 永远不要创建一个字符串只是为了在相同的代码中再次解析它。绝对没有理由这样做。如果您的目的是截断秒的小数部分,您可以使用以下方法来实现:

    datetime = datetime.AddTicks(-datetime.Ticks % TimeSpan.TicksPerSecond);

总而言之,您可能应该执行以下操作:

// I chose the time zone based on the location in your Stack Overflow user profile.
TimeZoneInfo tz = TimeZoneInfo.FindSystemTimeZoneById("India Standard time"); // or "Asia/Kolkata" on Linux

// Get the UTC time and convert to the given time zone.
datetime = TimeZoneInfo.ConvertTime(DateTime.UtcNow, tz);

// Truncate to seconds.
datetime = datetime.AddTicks(-datetime.Ticks % TimeSpan.TicksPerSecond);

上述内容将避免区域性设置的任何影响,因为没有进行解析或格式化。

此外,您应该删除 Console.ReadKey(); - 它会挂起您的网络作业。

关于c# - 您好,我正在尝试在 Azure 应用程序服务中运行 Web 作业,但它抛出与日期时间相关的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67112119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com