.net - utc时间 - python获取当前时区




如何使用DateTime指定一天中的最新时间 (7)

yourDateInstance.CloseDate = yourDateInstance.CloseDate.Date.AddDays(1).AddMilliseconds(-1);

我正在使用System.DateTime对象来允许用户选择日期范围。 用户只能使用第三方日历选择日期(而不是时间),因此我需要在日期之后自动指定应该使用的时间(即:00:00:00或23:59:59)被选中。

如何指定日期选择器已将日期存储为DateTime对象后的时间? 我可以使用AddHours, AddMinutes, AddSeconds方法,但这些方法相对于当前时间可能不是00:00:00。

startDate需要有00:00:00的时间, endDate需要23:59:59的时间才能占用整个天数。


你的问题已经得到了解答,但恕我直言更好的方法是不要试图从范围的末尾减去一个刻度,一秒或其他任何东西,并使用严格小于。

因此,如果您希望包含范围内的所有日期从startDate到endDate,忽略时间,则可以在C#中使用以下内容:

if ((myDate >= startDate.Date) && (myDate < endDate.Date.AddDays(1)))
{
    // ... it's in the range
}

或者在T-SQL中,假设您的@StartDate和@EndDate恰好是午夜,例如:

WHERE SomeDate >= @StartDate AND SomeDate < DATEADD(d,1,@EndDate)

UPDATE

更新示例以显示响应注释的包含范围。


基于其他答案,我创建了这个方便的扩展方法:

public static class DateTimeExtensions
{
    public static DateTime EndOfDay(this DateTime dateTime)
    {
        return dateTime.Date.AddDays(1).AddTicks(-1);
    }
}

如果您已经创建了一个DateTime对象,并希望将该时间替换为该给定日期的.Date PM,那么您可以使用.Date属性将日期设置为00:00:00,然后添加小时,分钟和秒。 例如:

var dt = yourDateInstance.Date.AddHours(23).AddMinutes(59).AddSeconds(59);

如果到了最晚时间,你的意思是晚上11:59:59,那么这也应该有效:

var dt = new DateTime(Now.Year, Now.Month, Now.Day, 23, 59, 59);

要获得今天的最后一刻:

DateTime d = new DateTime(Now.Year, Now.Month, Now.Day);
d = d.AddDays(1);
d = d.AddTicks(-1);

为了回应你的编辑,这就是我要做的:

DateTime start = new DateTime(Now.Year, Now.Month, Now.Day);
DateTime end = start.AddDays(1).AddTicks(-1);

// Or - just use end = start.AddDays(1), and use a < for comparison

这会给你预期的结果:

DateTime startDate= DateTime.Now.Date;
DateTime endDate= startDate.AddDays(2).Add(new TimeSpan(23, 59, 59));
//startDate: 28/9/2017 0:0:0 endDate: 29/9/2017 23:59:59

DateTime startDate = DateTime.Today;
DateTime stopDate = startDate.AddDays(1).AddTicks(-1);

作为注释, DateTime.Today返回(来自MSDN)

System.DateTime设置为今天的日期,时间组件设置为00:00:00。

正如其他人所指出的那样,添加一天,然后减去最小的时间量(一个刻度),你得到当天最后一次可能的时间。

当然,您可能需要考虑TimeZones,这取决于代码运行的位置与用户的位置。 UTC时间可能会很好,但这可能会让你失去一天(无论哪种方式),具体取决于代码运行的位置。





datetime