コード例 #1
0
        /// <summary>
        /// Gets first day of year
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="dayOfWeek"></param>
        /// <returns></returns>
        public static DateInfo GetFirstDayInfoOfYear(this DateTime dt, DayOfWeek dayOfWeek)
        {
            var t = DateTimeFactory.Create(dt.Year, 1, 1);

            while (t.DayOfWeek != dayOfWeek)
            {
                t = t.AddDays(-1);
            }
            return(t);
        }
コード例 #2
0
        public static int GetTargetDays(int year, int month, int weekAtMonth, int dayOfWeek)
        {
            var fd         = DateTimeFactory.Create(year, month, 1);
            var daysNeeded = dayOfWeek - (int)fd.DayOfWeek;

            if (daysNeeded < 0)
            {
                daysNeeded += 7;
            }
            return((daysNeeded + 1) + (7 * (weekAtMonth - 1)));
        }
コード例 #3
0
        /// <summary>
        /// Previous Year
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static DateTime PreviousYear(this DateTime dt)
        {
            var year        = dt.Year - 1;
            var daysOfMonth = DateTime.DaysInMonth(year, dt.Month);

            if (daysOfMonth == dt.Day)
            {
                return(DateTimeFactory.Create(year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond, dt.Kind));
            }

            var d = dt.Day - daysOfMonth;
            var p = DateTimeFactory.Create(year, dt.Month, daysOfMonth, dt.Hour, dt.Minute, dt.Second, dt.Millisecond, dt.Kind);

            return(p + d.Days());
        }
コード例 #4
0
        /// <summary>
        /// Create <see cref="DateTime"/> by special year, month and offset info.<br />
        /// 根据指定的年月和偏移信息创建 <see cref="DateTime"/>
        /// </summary>
        /// <param name="year"></param>
        /// <param name="month"></param>
        /// <param name="weekAtMonth"></param>
        /// <param name="dayOfWeek"></param>
        /// <returns></returns>
        public static DateTime OffsetByWeek(int year, int month, int weekAtMonth, int dayOfWeek)
        {
            if (weekAtMonth == 0 || weekAtMonth > 5)
            {
                throw new ArgumentException("weekAtMonth is invalid.", nameof(weekAtMonth));
            }

            var targetDay = DateTimeCalcHelper.GetTargetDays(year, month, weekAtMonth, dayOfWeek);

            if (targetDay > DateTime.DaysInMonth(year, month))
            {
                return(DateTime.MinValue);
            }

            return(DateTimeFactory.Create(year, month, targetDay));
        }
コード例 #5
0
        /// <summary>
        /// Create <see cref="DateInfo"/> by special year, month and offset info.<br />
        /// 根据指定的年月和偏移信息创建 <see cref="DateInfo"/>
        /// </summary>
        /// <param name="year"></param>
        /// <param name="month"></param>
        /// <param name="weekAtMonth"></param>
        /// <param name="dayOfWeek"></param>
        /// <param name="result"></param>
        /// <returns></returns>
        public static bool TryOffsetByWeek(int year, int month, int weekAtMonth, int dayOfWeek, out DateInfo result)
        {
            if (weekAtMonth == 0 || weekAtMonth > 5)
            {
                throw new ArgumentException("weekAtMonth is invalid.", nameof(weekAtMonth));
            }

            var targetDay = DateTimeCalcHelper.GetTargetDays(year, month, weekAtMonth, dayOfWeek);

            var invalid = targetDay > DateTime.DaysInMonth(year, month);

            result = invalid
                ? DateTime.MinValue
                : DateTimeFactory.Create(year, month, targetDay);

            return(!invalid);
        }
コード例 #6
0
 /// <summary>
 /// Set time
 /// </summary>
 /// <param name="dt"></param>
 /// <param name="millisecond"></param>
 /// <returns></returns>
 public static DateTime SetMillisecond(this DateTime dt, int millisecond) =>
 DateTimeFactory.Create(dt.Year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, millisecond, dt.Kind);
コード例 #7
0
 /// <summary>
 /// Set time
 /// </summary>
 /// <param name="dt"></param>
 /// <param name="hour"></param>
 /// <param name="minute"></param>
 /// <param name="second"></param>
 /// <param name="millisecond"></param>
 /// <returns></returns>
 public static DateTime SetTime(this DateTime dt, int hour, int minute, int second, int millisecond) =>
 DateTimeFactory.Create(dt.Year, dt.Month, dt.Day, hour, minute, second, millisecond, dt.Kind);
コード例 #8
0
 /// <summary>
 /// Set date
 /// </summary>
 /// <param name="dt"></param>
 /// <param name="year"></param>
 /// <returns></returns>
 public static DateTime SetYear(this DateTime dt, int year) =>
 DateTimeFactory.Create(year, dt.Month, dt.Day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond, dt.Kind);
コード例 #9
0
 /// <summary>
 /// Set date
 /// </summary>
 /// <param name="dt"></param>
 /// <param name="year"></param>
 /// <param name="month"></param>
 /// <param name="day"></param>
 /// <returns></returns>
 public static DateTime SetDate(this DateTime dt, int year, int month, int day) =>
 DateTimeFactory.Create(year, month, day, dt.Hour, dt.Minute, dt.Second, dt.Millisecond, dt.Kind);
コード例 #10
0
 /// <summary>
 /// End of day (timezone-adjusted)
 /// </summary>
 /// <param name="dt"></param>
 /// <param name="timeZoneOffset"></param>
 /// <returns></returns>
 public static DateTime EndOfDay(this DateTime dt, int timeZoneOffset) =>
 DateTimeFactory.Create(dt.Year, dt.Month, dt.Day, 23, 59, 59, 999, dt.Kind).AddHours(timeZoneOffset);
コード例 #11
0
 /// <summary>
 /// End of day
 /// </summary>
 /// <param name="dt"></param>
 /// <returns></returns>
 public static DateTime EndOfDay(this DateTime dt) =>
 DateTimeFactory.Create(dt.Year, dt.Month, dt.Day, 23, 59, 59, 999, dt.Kind);
コード例 #12
0
 /// <summary>
 /// To Datetime
 /// </summary>
 /// <param name="lt"></param>
 /// <param name="day"></param>
 /// <param name="kind"></param>
 /// <param name="year"></param>
 /// <param name="month"></param>
 /// <returns></returns>
 public static DateTime ToDateTime(this LocalTime lt, int year, int month, int day, DateTimeKind kind) =>
 DateTimeFactory.Create(year, month, day, lt.Hour, lt.Minute, lt.Second, lt.Millisecond, kind);
コード例 #13
0
 /// <summary>
 /// Beginning of day
 /// </summary>
 /// <param name="dt"></param>
 /// <param name="timeZoneOffset"></param>
 /// <returns></returns>
 public static DateTime BeginningOfDay(this DateTime dt, int timeZoneOffset) =>
 DateTimeFactory.Create(dt.Year, dt.Month, dt.Day, 0, 0, 0, 0, dt.Kind).AddHours(timeZoneOffset);
コード例 #14
0
 /// <summary>
 /// Beginning of day
 /// </summary>
 /// <param name="dt"></param>
 /// <returns></returns>
 public static DateTime BeginningOfDay(this DateTime dt) =>
 DateTimeFactory.Create(dt.Year, dt.Month, dt.Day, 0, 0, 0, 0, dt.Kind);
コード例 #15
0
 /// <summary>
 /// Convert <see cref="DateTime"/> to Epoch time span.
 /// </summary>
 /// <param name="dt"></param>
 /// <returns></returns>
 public static TimeSpan ToEpochTimeSpan(this DateTime dt) => dt.Subtract(DateTimeFactory.Create(1970, 1, 1));
コード例 #16
0
 /// <summary>
 /// To Datetime
 /// </summary>
 /// <param name="ld"></param>
 /// <param name="kind"></param>
 /// <returns></returns>
 public static DateTime ToDateTime(this LocalDate ld, DateTimeKind kind) =>
 DateTimeFactory.Create(ld.Year, ld.Month, ld.Day, 0, 0, 0, 0, kind);