Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检查DateTime是否在特定范围内_C#_.net_Silverlight_Datetime - Fatal编程技术网

C# 检查DateTime是否在特定范围内

C# 检查DateTime是否在特定范围内,c#,.net,silverlight,datetime,C#,.net,Silverlight,Datetime,需要检查DateTime是否在特定范围内。 我想我需要计算今年DST时间的第一年和最后一天 我如何计算“3月2日星期日”的日期 例如,我需要检查2011年11月21日是否介于3月第2周的星期日和11月第1周的星期日之间-答案应该是否 如果我通过了2011年8月8日-答案应该是肯定的 基本上,我需要编写函数来检查我的日期是否属于夏令时。到目前为止,我唯一的想法就是写循环来查找第二周 所以,我会从三月的第一天开始循环,直到第二次到达星期天。同样的事情,我会从11月1日循环(增加天数1),直到我第一次

需要检查DateTime是否在特定范围内。 我想我需要计算今年DST时间的第一年和最后一天

我如何计算“3月2日星期日”的日期

例如,我需要检查2011年11月21日是否介于3月第2周的星期日和11月第1周的星期日之间-答案应该是否

如果我通过了2011年8月8日-答案应该是肯定的

基本上,我需要编写函数来检查我的日期是否属于夏令时。到目前为止,我唯一的想法就是写循环来查找第二周

所以,我会从三月的第一天开始循环,直到第二次到达星期天。同样的事情,我会从11月1日循环(增加天数1),直到我第一次到达星期天

换句话说,我需要一个函数来检查输入数据是否在夏令时。由上述约束定义的时间段

另外,我不能使用时区信息,因为它在Silverlight中 P.P.S我不能使用
DateTime.IsDaylightSavingsTime
,因为我没有时间使用“local”

尝试使用该方法

如果日期时间为UTC,则可以转换为本地时间,然后使用
IsDaylightSavingsTime()

尝试使用这种方法

如果日期时间为UTC,则可以转换为本地时间,然后使用
IsDaylightSavingsTime()


这对您来说可能足够了:

这对您来说足够了:

在多个时区上操作是一件棘手的事情。一般来说,这个问题是无法通过一个人的努力解决的(除非你献身于此)。如果您需要支持2-3个时区,那么可以使用循环解决方案(AFAIK这是在.NET中计算周数的唯一方法)

我使用此代码计算DST切换的周数:

/// <summary>
/// Utility method for GetDaylightChanges. 
/// Searches for date defined by TransitionTime structure.
/// </summary>
/// <param name="year">Year for which create date.</param>
/// <param name="transitionTime">TimeZoneInfo.TransitionTime which to use for date calculation.</param>
/// <returns>Transition time.</returns>
private static DateTime DateTimeByWeek(int year, TimeZoneInfo.TransitionTime transitionTime)
{
    const int DaysInWeek = 7;

    // get year and month
    DateTime switchDate = new DateTime(year, transitionTime.Month, 1);

    // move to switch day of week
    while (switchDate.DayOfWeek != transitionTime.DayOfWeek)
    {
        switchDate = switchDate.AddDays(1);
    }

    // move to week
    switchDate = switchDate.AddDays((transitionTime.Week - 1) * DaysInWeek);

    // add time
    switchDate = switchDate.AddHours(transitionTime.TimeOfDay.Hour);

    // sometimes it gives us next month...
    if (switchDate.Month != transitionTime.Month)
    {
        // ...then use previous (last) week
        return switchDate.AddDays(-DaysInWeek);
    }

    return switchDate;
}
//
///GetDaylightChanges的实用程序方法。
///搜索由TransitionTime结构定义的日期。
/// 
///创建日期的年份。
///TimeZoneInfo.TransitionTime,用于日期计算。
///过渡时间。
私有静态DateTime DateTimeByWeek(整数年,TimeZoneInfo.TransitionTime TransitionTime)
{
const int DaysInWeek=7;
//年复一年
DateTime switchDate=新的日期时间(年、过渡时间、月、1);
//移动到切换星期几
while(switchDate.DayOfWeek!=transitionTime.DayOfWeek)
{
switchDate=switchDate.AddDays(1);
}
//移到下周
switchDate=switchDate.AddDays((transitionTime.Week-1)*DaysInWeek);
//加时
switchDate=switchDate.AddHours(transitionTime.TimeOfDay.Hour);
//有时它会给我们下个月。。。
if(switchDate.Month!=transitionTime.Month)
{
//…然后使用上一周(上一周)
返回switchDate.AddDays(-DaysInWeek);
}
返回日期;
}

显然,您不需要时间,需要用一些自定义参数替换
TransitionTime

在多个时区上操作是一件棘手的事情。一般来说,这个问题是无法通过一个人的努力解决的(除非你献身于此)。如果您需要支持2-3个时区,那么可以使用循环解决方案(AFAIK这是在.NET中计算周数的唯一方法)

我使用此代码计算DST切换的周数:

/// <summary>
/// Utility method for GetDaylightChanges. 
/// Searches for date defined by TransitionTime structure.
/// </summary>
/// <param name="year">Year for which create date.</param>
/// <param name="transitionTime">TimeZoneInfo.TransitionTime which to use for date calculation.</param>
/// <returns>Transition time.</returns>
private static DateTime DateTimeByWeek(int year, TimeZoneInfo.TransitionTime transitionTime)
{
    const int DaysInWeek = 7;

    // get year and month
    DateTime switchDate = new DateTime(year, transitionTime.Month, 1);

    // move to switch day of week
    while (switchDate.DayOfWeek != transitionTime.DayOfWeek)
    {
        switchDate = switchDate.AddDays(1);
    }

    // move to week
    switchDate = switchDate.AddDays((transitionTime.Week - 1) * DaysInWeek);

    // add time
    switchDate = switchDate.AddHours(transitionTime.TimeOfDay.Hour);

    // sometimes it gives us next month...
    if (switchDate.Month != transitionTime.Month)
    {
        // ...then use previous (last) week
        return switchDate.AddDays(-DaysInWeek);
    }

    return switchDate;
}
//
///GetDaylightChanges的实用程序方法。
///搜索由TransitionTime结构定义的日期。
/// 
///创建日期的年份。
///TimeZoneInfo.TransitionTime,用于日期计算。
///过渡时间。
私有静态DateTime DateTimeByWeek(整数年,TimeZoneInfo.TransitionTime TransitionTime)
{
const int DaysInWeek=7;
//年复一年
DateTime switchDate=新的日期时间(年、过渡时间、月、1);
//移动到切换星期几
while(switchDate.DayOfWeek!=transitionTime.DayOfWeek)
{
switchDate=switchDate.AddDays(1);
}
//移到下周
switchDate=switchDate.AddDays((transitionTime.Week-1)*DaysInWeek);
//加时
switchDate=switchDate.AddHours(transitionTime.TimeOfDay.Hour);
//有时它会给我们下个月。。。
if(switchDate.Month!=transitionTime.Month)
{
//…然后使用上一周(上一周)
返回switchDate.AddDays(-DaysInWeek);
}
返回日期;
}

显然,您不需要时间,需要用一些自定义参数替换
TransitionTime

我刚做了这个小方法,检查一下,然后告诉我:

    bool IsInDaylightSavingsTime(DateTime date)
    {
        // get second sunday in march
        DateTime _tempDateMar = new DateTime(date.Year, 3, 1);
        int secondSunDayInMar = (8 - (int)_tempDateMar.DayOfWeek) + 7;
        _tempDateMar = new DateTime(date.Year, 3, secondSunDayInMar, 2, 0, 0);

        //get first sunday in november
        DateTime _tempDateNov = new DateTime(date.Year, 11, 1);
        int firstSunDayInNov = (8 - (int)_tempDateNov.DayOfWeek);
        _tempDateNov = new DateTime(date.Year, 11, firstSunDayInNov, 2, 0, 0);

        return (date >= _tempDateMar && date <= _tempDateNov);
    }
bool IsInDaylightSavingsTime(日期时间日期)
{
//三月的第二个星期天
DateTime _tempDateMar=新的日期时间(date.Year,3,1);
int Second Sundayinmar=(8-(int)tempDateMar.DayOfWeek)+7;
_tempDateMar=新的日期时间(date.Year,3,second sundayinmar,2,0,0);
//11月的第一个星期天
DateTime _tempDateNov=新的日期时间(date.Year,11,1);
int firstSunDayInNov=(8-(int)u tempDateNov.DayOfWeek);
_tempDateNov=新日期时间(date.Year,11,firstSunDayInNov,2,0,0);

return(date>=\u tempDateMar&&date我刚刚做了这个小方法,检查一下,让我知道:

    bool IsInDaylightSavingsTime(DateTime date)
    {
        // get second sunday in march
        DateTime _tempDateMar = new DateTime(date.Year, 3, 1);
        int secondSunDayInMar = (8 - (int)_tempDateMar.DayOfWeek) + 7;
        _tempDateMar = new DateTime(date.Year, 3, secondSunDayInMar, 2, 0, 0);

        //get first sunday in november
        DateTime _tempDateNov = new DateTime(date.Year, 11, 1);
        int firstSunDayInNov = (8 - (int)_tempDateNov.DayOfWeek);
        _tempDateNov = new DateTime(date.Year, 11, firstSunDayInNov, 2, 0, 0);

        return (date >= _tempDateMar && date <= _tempDateNov);
    }
bool IsInDaylightSavingsTime(日期时间日期)
{
//三月的第二个星期天
DateTime _tempDateMar=新的日期时间(date.Year,3,1);
int Second Sundayinmar=(8-(int)tempDateMar.DayOfWeek)+7;
_tempDateMar=新的日期时间(date.Year,3,second sundayinmar,2,0,0);
//11月的第一个星期天
DateTime _tempDateNov=新的日期时间(date.Year,11,1);
int firstSunDayInNov=(8-(int)u tempDateNov.DayOfWeek);
_tempDateNov=新日期时间(date.Year,11,firstSunDayInNov,2,0,0);

return(date>=\u tempDateMar&&date您可以编写一个web服务,该服务采用utc日期时间和时区ID,并返回您需要的信息-例如IsDaylightSavings。由于您可以访问完整的.net framework,因此您可以使用它具有的时区功能