gpt4 book ai didi

c# - 在 C#/ASP.NET 中将日期时间转换为时间

转载 作者:太空宇宙 更新时间:2023-11-03 13:32:32 24 4
gpt4 key购买 nike

我正在尝试在我的 asp.net 项目中插入时间。

RequestUpdateEmployeeDTR requestUpdateEmployeeDTR = new RequestUpdateEmployeeDTR();
requestUpdateEmployeeDTR.AttendanceDeducID = int.Parse(txtAttendanceDeducID.Text);
requestUpdateEmployeeDTR.TimeInChange = txtTimeOutChange.Text;
requestUpdateEmployeeDTR.TimeOutChange = txtTimeOutChange.Text;

TimeInChangeTimeOutChangeDateTime 数据类型。但是我正在插入时间数据类型。如何使用 C# 将其转换为时间数据类型?谢谢!

最佳答案

.NET Framework 没有原生的 Time 数据类型来表示一天中的时间。您必须在以下三个选项之一中做出决定:

选项 1

使用 DateTime 类型,并忽略日期部分。选择一个超出应用程序正常值范围的日期。我通常使用 0001-01-01,可以方便地用作 DateTime.MinValue

如果您从字符串中解析时间,最简单的方法是使用 DateTimeStyles.NoCurrentDateDefault 选项。如果没有此选项,它将使用今天 的日期而不是最小日期。

DateTime myTime = DateTime.Parse("12:34", CultureInfo.InvariantCulture,
DateTimeStyles.NoCurrentDateDefault);

// Result: 0001-01-01 12:34:00

当然,如果您更喜欢使用今天 日期,您可以这样做。我只是认为它混淆了问题,因为您可能希望将其完全应用于其他日期。

请注意,一旦您有了 DateTime 值,您就可以使用 .TimeOfDay 属性来获取时间部分,表示为 TimeSpan,这导致选项 2...

选项 2

使用 TimeSpan 类型,但在解释它时要小心。请理解 TimeSpan 首先是一种表示经过的持续时间 的类型,而不是一天中的某个时间。这意味着它可以存储超过 24 小时,还可以存储值以表示时间向后移动。

当您将其用作一天中的时间时,您可能倾向于将其视为“自午夜以来耗时”。然而,这会给您带来麻烦,因为有些日子在本地时区不存在午夜。

例如,October 20th 2013 in Brazil由于夏令时,从凌晨 1:00 开始。因此,当天 8:00TimeSpan 实际上从 1:00 开始只过去了 7 个小时,而不是从午夜开始过去了 8 个小时。

即使在美国,对于使用夏令时的地点,此值也具有误导性。例如,November 3rd 2013 in Los Angeles DST 回滚时有一个重复的小时。因此,这一天 8:00TimeSpan 实际上从午夜开始已经过去了 9 小时

因此,如果您使用此选项,请注意将其视为与时钟匹配的代表性时间值,而不是“自午夜以来耗时”。

您可以使用以下代码直接从字符串中获取它:

TimeSpan myTime = TimeSpan.Parse("12:34", CultureInfo.InvariantCulture);

选项 3

使用具有真正“时间”类型的库。您会在 Noda Time 中找到它,它为在 .NET 中处理日期和时间提供了一个好得多的 API。

表示“一天中的时间”的类型称为 LocalTime,您可以像这样从字符串中获取一个:

var pattern = LocalTimePattern.CreateWithInvariantCulture("HH:mm");
LocalTime myTime = pattern.Parse("12:34").Value;

因为从您的问题看来您正在使用 time and attendance数据,我强烈建议你使用Noda Time满足您所有的日期和时间需求。它会迫使你对你正在做的事情投入更多的思考。在此过程中,您将避免内置日期/时间类型可能带来的陷阱。

如果您在数据库(例如 SQL 服务器)中存储一个 Time 类型,它会在 .Net 中被转换为一个 TimeSpan。因此,如果您选择此选项,则需要将 LocalTime 转换为 TimeSpan,如下所示:

TimeSpan ts = new TimeSpan(myTime.TickOfDay);

关于c# - 在 C#/ASP.NET 中将日期时间转换为时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20022374/

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