优化代码
This commit is contained in:
parent
e806a127bf
commit
4ce1741f7e
@ -137,115 +137,99 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
|
|
||||||
//电表定时广播校时,一天一次。
|
//电表定时广播校时,一天一次。
|
||||||
string currentTimeStr = $"{currentTime:HH:mm:00}";
|
string currentTimeStr = $"{currentTime:HH:mm:00}";
|
||||||
//if (string.Equals(currentTimeStr, _applicationOptions.AutomaticVerificationTime, StringComparison.CurrentCultureIgnoreCase))//自动校时
|
if (string.Equals(currentTimeStr, _applicationOptions.AutomaticVerificationTime, StringComparison.CurrentCultureIgnoreCase))//自动校时
|
||||||
//{
|
{
|
||||||
// //_logger.LogInformation($"{nameof(AmmeterScheduledAutomaticVerificationTime)} 电表自动校时,非自动校时时间");
|
//_logger.LogInformation($"{nameof(AmmeterScheduledAutomaticVerificationTime)} 电表自动校时,非自动校时时间");
|
||||||
// //return;
|
//return;
|
||||||
|
|
||||||
// _ = CreateMeterPublishTask<DeviceInfo>(
|
_ = CreateMeterPublishTask<DeviceInfo>(
|
||||||
// timeDensity: timeDensity,
|
timeDensity: timeDensity,
|
||||||
// nextTaskTime: currentTime,
|
nextTaskTime: currentTime,
|
||||||
// meterType: MeterTypeEnum.Ammeter,
|
meterType: MeterTypeEnum.Ammeter,
|
||||||
// taskCreateAction: async (timeDensity, data, groupIndex, timestamps) =>
|
taskCreateAction: async (timeDensity, data, groupIndex, timestamps) =>
|
||||||
// {
|
|
||||||
// var tempTask = await AmmeterScheduledAutomaticVerificationTime(timeDensity, data, groupIndex, timestamps);
|
|
||||||
|
|
||||||
// if (tempTask == null || tempTask.Count <= 0)
|
|
||||||
// {
|
|
||||||
// _logger.LogWarning($"电表自动校时 {data.Name} 任务数据构建失败:{data.Serialize()}");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// _ = _dataChannelManage.ScheduledMeterTaskWriterAsync(DataChannelManage.TaskDataChannel.Writer, (ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, tempTask));
|
|
||||||
// });
|
|
||||||
//}
|
|
||||||
//else if (string.Equals(currentTimeStr, _applicationOptions.AutomaticTerminalVersionTime, StringComparison.CurrentCultureIgnoreCase))//集中器版本号读取
|
|
||||||
//{
|
|
||||||
// _ = CreateMeterPublishTask<DeviceInfo>(
|
|
||||||
// timeDensity: timeDensity,
|
|
||||||
// nextTaskTime: currentTime,
|
|
||||||
// meterType: MeterTypeEnum.Ammeter,
|
|
||||||
// taskCreateAction: async (timeDensity, data, groupIndex, timestamps) =>
|
|
||||||
// {
|
|
||||||
// var tempTask = await ConcentratorScheduledAutomaticGetTerminalVersion(timeDensity, data, groupIndex, timestamps);
|
|
||||||
// if (tempTask == null || tempTask.Count <= 0)
|
|
||||||
// {
|
|
||||||
// _logger.LogWarning($"集中器终端版本信息 {data.Name} 任务数据构建失败:{data.Serialize()}");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// _ = _dataChannelManage.ScheduledMeterTaskWriterAsync(DataChannelManage.TaskDataChannel.Writer, (ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, tempTask));
|
|
||||||
// });
|
|
||||||
//}
|
|
||||||
//else if (string.Equals(currentTimeStr, _applicationOptions.AutomaticTelematicsModuleTime, StringComparison.CurrentCultureIgnoreCase))//SIM卡读取
|
|
||||||
//{
|
|
||||||
// _ = CreateMeterPublishTask<DeviceInfo>(
|
|
||||||
// timeDensity: timeDensity,
|
|
||||||
// nextTaskTime: currentTime,
|
|
||||||
// meterType: MeterTypeEnum.Ammeter,
|
|
||||||
// taskCreateAction: async (timeDensity, data, groupIndex, timestamps) =>
|
|
||||||
// {
|
|
||||||
// var tempTask = await ConcentratorScheduledAutomaticGetTelematicsModule(timeDensity, data, groupIndex, timestamps);
|
|
||||||
// if (tempTask == null || tempTask.Count <= 0)
|
|
||||||
// {
|
|
||||||
// _logger.LogWarning($"集中器SIM卡读取 {data.Name} 任务数据构建失败:{data.Serialize()}");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// _ = _dataChannelManage.ScheduledMeterTaskWriterAsync(DataChannelManage.TaskDataChannel.Writer, (ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, tempTask));
|
|
||||||
// });
|
|
||||||
//}
|
|
||||||
//else if (string.Equals(currentTimeStr, _applicationOptions.AutomaticTelematicsModuleTime, StringComparison.CurrentCultureIgnoreCase))//月冻结
|
|
||||||
//{
|
|
||||||
// _ = CreateMeterPublishTask<DeviceInfo>(
|
|
||||||
// timeDensity: timeDensity,
|
|
||||||
// nextTaskTime: currentTime,
|
|
||||||
// meterType: MeterTypeEnum.Ammeter,
|
|
||||||
// taskCreateAction: async (timeDensity, data, groupIndex, timestamps) =>
|
|
||||||
// {
|
|
||||||
// var tempTask = await AmmeterScheduledGetAutomaticDayFreezeData(timeDensity, data, groupIndex, timestamps);
|
|
||||||
// if (tempTask == null || tempTask.Count <= 0)
|
|
||||||
// {
|
|
||||||
// _logger.LogWarning($"电表月冻结 {data.Name} 任务数据构建失败:{data.Serialize()}");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// _ = _dataChannelManage.ScheduledMeterTaskWriterAsync(DataChannelManage.TaskDataChannel.Writer, (ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, tempTask));
|
|
||||||
// });
|
|
||||||
//}
|
|
||||||
//else if (string.Equals(currentTimeStr, _applicationOptions.AutomaticDayFreezeTime, StringComparison.CurrentCultureIgnoreCase))//日冻结
|
|
||||||
//{
|
|
||||||
// _ = CreateMeterPublishTask<DeviceInfo>(
|
|
||||||
// timeDensity: timeDensity,
|
|
||||||
// nextTaskTime: currentTime,
|
|
||||||
// meterType: MeterTypeEnum.Ammeter,
|
|
||||||
// taskCreateAction: async (timeDensity, data, groupIndex, timestamps) =>
|
|
||||||
// {
|
|
||||||
// var tempTask = await AmmeterScheduledGetAutomaticMonthFreezeData(timeDensity, data, groupIndex, timestamps);
|
|
||||||
// if (tempTask == null || tempTask.Count <= 0)
|
|
||||||
// {
|
|
||||||
// _logger.LogWarning($"电表日冻结 {data.Name} 任务数据构建失败:{data.Serialize()}");
|
|
||||||
// return;
|
|
||||||
// }
|
|
||||||
// _ = _dataChannelManage.ScheduledMeterTaskWriterAsync(DataChannelManage.TaskDataChannel.Writer, (ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, tempTask));
|
|
||||||
// });
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// _logger.LogInformation($"{nameof(CreateToBeIssueTasks)} 不是自动校时、采集终端信息等时间,继续处理其他");
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
_ = CreateMeterPublishTask<DeviceInfo>(
|
|
||||||
timeDensity: timeDensity,
|
|
||||||
nextTaskTime: currentTime,
|
|
||||||
meterType: MeterTypeEnum.Ammeter,
|
|
||||||
taskCreateAction: async (timeDensity, data, groupIndex, timestamps) =>
|
|
||||||
{
|
|
||||||
var tempTask = await ConcentratorScheduledAutomaticGetTelematicsModule(timeDensity, data, groupIndex, timestamps);
|
|
||||||
if (tempTask == null || tempTask.Count <= 0)
|
|
||||||
{
|
{
|
||||||
_logger.LogWarning($"集中器SIM卡读取 {data.Name} 任务数据构建失败:{data.Serialize()}");
|
var tempTask = await AmmeterScheduledAutomaticVerificationTime(timeDensity, data, groupIndex, timestamps);
|
||||||
return;
|
|
||||||
}
|
if (tempTask == null || tempTask.Count <= 0)
|
||||||
_ = _dataChannelManage.ScheduledMeterTaskWriterAsync(DataChannelManage.TaskDataChannel.Writer, (ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, tempTask));
|
{
|
||||||
});
|
_logger.LogWarning($"电表自动校时 {data.Name} 任务数据构建失败:{data.Serialize()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_ = _dataChannelManage.ScheduledMeterTaskWriterAsync(DataChannelManage.TaskDataChannel.Writer, (ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, tempTask));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (string.Equals(currentTimeStr, _applicationOptions.AutomaticTerminalVersionTime, StringComparison.CurrentCultureIgnoreCase))//集中器版本号读取
|
||||||
|
{
|
||||||
|
_ = CreateMeterPublishTask<DeviceInfo>(
|
||||||
|
timeDensity: timeDensity,
|
||||||
|
nextTaskTime: currentTime,
|
||||||
|
meterType: MeterTypeEnum.Ammeter,
|
||||||
|
taskCreateAction: async (timeDensity, data, groupIndex, timestamps) =>
|
||||||
|
{
|
||||||
|
var tempTask = await ConcentratorScheduledAutomaticGetTerminalVersion(timeDensity, data, groupIndex, timestamps);
|
||||||
|
if (tempTask == null || tempTask.Count <= 0)
|
||||||
|
{
|
||||||
|
_logger.LogWarning($"集中器终端版本信息 {data.Name} 任务数据构建失败:{data.Serialize()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_ = _dataChannelManage.ScheduledMeterTaskWriterAsync(DataChannelManage.TaskDataChannel.Writer, (ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, tempTask));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (string.Equals(currentTimeStr, _applicationOptions.AutomaticTelematicsModuleTime, StringComparison.CurrentCultureIgnoreCase))//SIM卡读取
|
||||||
|
{
|
||||||
|
_ = CreateMeterPublishTask<DeviceInfo>(
|
||||||
|
timeDensity: timeDensity,
|
||||||
|
nextTaskTime: currentTime,
|
||||||
|
meterType: MeterTypeEnum.Ammeter,
|
||||||
|
taskCreateAction: async (timeDensity, data, groupIndex, timestamps) =>
|
||||||
|
{
|
||||||
|
var tempTask = await ConcentratorScheduledAutomaticGetTelematicsModule(timeDensity, data, groupIndex, timestamps);
|
||||||
|
if (tempTask == null || tempTask.Count <= 0)
|
||||||
|
{
|
||||||
|
_logger.LogWarning($"集中器SIM卡读取 {data.Name} 任务数据构建失败:{data.Serialize()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_ = _dataChannelManage.ScheduledMeterTaskWriterAsync(DataChannelManage.TaskDataChannel.Writer, (ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, tempTask));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (string.Equals(currentTimeStr, _applicationOptions.AutomaticMonthFreezeTime, StringComparison.CurrentCultureIgnoreCase))//月冻结
|
||||||
|
{
|
||||||
|
_ = CreateMeterPublishTask<DeviceInfo>(
|
||||||
|
timeDensity: timeDensity,
|
||||||
|
nextTaskTime: currentTime,
|
||||||
|
meterType: MeterTypeEnum.Ammeter,
|
||||||
|
taskCreateAction: async (timeDensity, data, groupIndex, timestamps) =>
|
||||||
|
{
|
||||||
|
var tempTask = await AmmeterScheduledGetAutomaticMonthFreezeData(timeDensity, data, groupIndex, timestamps);
|
||||||
|
if (tempTask == null || tempTask.Count <= 0)
|
||||||
|
{
|
||||||
|
_logger.LogWarning($"电表月冻结 {data.Name} 任务数据构建失败:{data.Serialize()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_ = _dataChannelManage.ScheduledMeterTaskWriterAsync(DataChannelManage.TaskDataChannel.Writer, (ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, tempTask));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (string.Equals(currentTimeStr, _applicationOptions.AutomaticDayFreezeTime, StringComparison.CurrentCultureIgnoreCase))//日冻结
|
||||||
|
{
|
||||||
|
_ = CreateMeterPublishTask<DeviceInfo>(
|
||||||
|
timeDensity: timeDensity,
|
||||||
|
nextTaskTime: currentTime,
|
||||||
|
meterType: MeterTypeEnum.Ammeter,
|
||||||
|
taskCreateAction: async (timeDensity, data, groupIndex, timestamps) =>
|
||||||
|
{
|
||||||
|
var tempTask = await AmmeterScheduledGetAutomaticDayFreezeData(timeDensity, data, groupIndex, timestamps);
|
||||||
|
if (tempTask == null || tempTask.Count <= 0)
|
||||||
|
{
|
||||||
|
_logger.LogWarning($"电表日冻结 {data.Name} 任务数据构建失败:{data.Serialize()}");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
_ = _dataChannelManage.ScheduledMeterTaskWriterAsync(DataChannelManage.TaskDataChannel.Writer, (ProtocolConst.AmmeterSubscriberWorkerOtherIssuedEventName, tempTask));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_logger.LogInformation($"{nameof(CreateToBeIssueTasks)} 不是自动校时、采集终端信息等时间,继续处理其他");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -933,7 +917,13 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
{
|
{
|
||||||
FocusAddress = ammeterInfo.FocusAddress,
|
FocusAddress = ammeterInfo.FocusAddress,
|
||||||
Pn = ammeterInfo.MeteringCode,
|
Pn = ammeterInfo.MeteringCode,
|
||||||
ItemCode = item
|
ItemCode = item,
|
||||||
|
DataTimeMark = new Protocol.DataTimeMark()
|
||||||
|
{
|
||||||
|
Density = ammeterInfo.TimeDensity.GetFocusDensity(),//转换成协议的值
|
||||||
|
Point = 1,
|
||||||
|
DataTime = currentTime.AddDays(-1),//日冻结抄读时间为昨天
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var meterReadingRecords = CreateAmmeterPacketInfo(
|
var meterReadingRecords = CreateAmmeterPacketInfo(
|
||||||
@ -981,9 +971,19 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
|
||||||
#if DEBUG
|
#if DEBUG
|
||||||
#else
|
#else
|
||||||
|
//需要检查是不是每月1号抄读上个月的数据
|
||||||
|
if (currentTime.Date != currentTime.FirstDayOfMonth().Date)
|
||||||
|
{
|
||||||
|
_logger.LogInformation($"{nameof(AmmeterScheduledGetAutomaticMonthFreezeData)} 非月冻结数据抄读时间,暂不处理");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
timestamps = currentTime.LastDayOfPrdviousMonth();
|
||||||
|
}
|
||||||
|
|
||||||
//判断是否是月冻结数据抄读
|
//判断是否是月冻结数据抄读
|
||||||
if (!string.Equals(currentTimeStr, _applicationOptions.AutomaticMonthFreezeTime, StringComparison.CurrentCultureIgnoreCase))
|
if (!string.Equals(currentTimeStr, _applicationOptions.AutomaticMonthFreezeTime, StringComparison.CurrentCultureIgnoreCase))
|
||||||
{
|
{
|
||||||
@ -1002,13 +1002,23 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var item in DayFreezeCodes)
|
foreach (var item in MonthFreezeCodes)
|
||||||
{
|
{
|
||||||
ProtocolBuildResponse builderResponse = await protocolPlugin.BuildAsync(new ProtocolBuildRequest()
|
ProtocolBuildResponse builderResponse = await protocolPlugin.BuildAsync(new ProtocolBuildRequest()
|
||||||
{
|
{
|
||||||
FocusAddress = ammeterInfo.FocusAddress,
|
FocusAddress = ammeterInfo.FocusAddress,
|
||||||
Pn = ammeterInfo.MeteringCode,
|
Pn = ammeterInfo.MeteringCode,
|
||||||
ItemCode = item
|
ItemCode = item,
|
||||||
|
DataTimeMark = new Protocol.DataTimeMark()
|
||||||
|
{
|
||||||
|
Density = ammeterInfo.TimeDensity.GetFocusDensity(),//转换成协议的值
|
||||||
|
Point = 1,
|
||||||
|
#if DEBUG
|
||||||
|
DataTime = currentTime.AddMonths(-1),//月冻结抄读时间为上个月
|
||||||
|
#else
|
||||||
|
DataTime = timestamps,//月冻结抄读时间为上个月
|
||||||
|
#endif
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
var meterReadingRecords = CreateAmmeterPacketInfo(
|
var meterReadingRecords = CreateAmmeterPacketInfo(
|
||||||
@ -1108,7 +1118,7 @@ namespace JiShe.CollectBus.ScheduledMeterReading
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region 水表采集处理
|
#region 水表采集处理
|
||||||
|
|||||||
@ -265,5 +265,79 @@ namespace JiShe.CollectBus.Common.Extensions
|
|||||||
}
|
}
|
||||||
return DateTime.TryParseExact(dateLong.ToString(), "yyyyMMdd HHmmssZZ", null, System.Globalization.DateTimeStyles.None, out DateTime date) ? date : throw new ArgumentException("Date must be between 10000101 and 99991231.");
|
return DateTime.TryParseExact(dateLong.ToString(), "yyyyMMdd HHmmssZZ", null, System.Globalization.DateTimeStyles.None, out DateTime date) ? date : throw new ArgumentException("Date must be between 10000101 and 99991231.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 取得某月的第一天
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="datetime">要取得月份第一天的时间</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static DateTime FirstDayOfMonth(this DateTime datetime)
|
||||||
|
{
|
||||||
|
return datetime.AddDays(1 - datetime.Day);
|
||||||
|
}
|
||||||
|
|
||||||
|
///<summary>
|
||||||
|
/// 取得某月的最后一天
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="datetime">要取得月份最后一天的时间</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static DateTime LastDayOfMonth(this DateTime datetime)
|
||||||
|
{
|
||||||
|
return datetime.AddDays(1 - datetime.Day).AddMonths(1).AddDays(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 取得上个月第一天
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="datetime">要取得上个月第一天的当前时间</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static DateTime FirstDayOfPreviousMonth(this DateTime datetime)
|
||||||
|
{
|
||||||
|
return datetime.AddDays(1 - datetime.Day).AddMonths(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 取得上个月的最后一天
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="datetime">要取得上个月最后一天的当前时间</param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static DateTime LastDayOfPrdviousMonth(this DateTime datetime)
|
||||||
|
{
|
||||||
|
return datetime.AddDays(1 - datetime.Day).AddDays(-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 取得某月第一天0点以及最后一天的23:59:59时间范围
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="datetime"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static Tuple<DateTime, DateTime> GetMonthDateRange(this DateTime datetime)
|
||||||
|
{
|
||||||
|
var lastDayOfMonthDate = LastDayOfMonth(datetime);
|
||||||
|
return new Tuple<DateTime, DateTime>(datetime.FirstDayOfMonth(), new DateTime(lastDayOfMonthDate.Year, lastDayOfMonthDate.Month, lastDayOfMonthDate.Day, 23, 59, 59));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 取得某一天0点到当月最后一天的23:59:59时间范围
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="datetime"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static Tuple<DateTime, DateTime> GetCurrentDateToLastDayRange(this DateTime datetime)
|
||||||
|
{
|
||||||
|
var lastDayOfMonthDate = LastDayOfMonth(datetime);
|
||||||
|
return new Tuple<DateTime, DateTime>(datetime.Date, new DateTime(lastDayOfMonthDate.Year, lastDayOfMonthDate.Month, lastDayOfMonthDate.Day, 23, 59, 59));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 取得某一天0点到23:59:59时间范围
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="datetime"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static Tuple<DateTime, DateTime> GetCurrentDateRange(this DateTime datetime)
|
||||||
|
{
|
||||||
|
return new Tuple<DateTime, DateTime>(datetime.Date, new DateTime(datetime.Year, datetime.Month, datetime.Day, 23, 59, 59));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -136,57 +136,7 @@ namespace JiShe.CollectBus.Common.Helpers
|
|||||||
return objModel;
|
return objModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得某月的第一天
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="datetime">要取得月份第一天的时间</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static DateTime FirstDayOfMonth(this DateTime datetime)
|
|
||||||
{
|
|
||||||
return datetime.AddDays(1 - datetime.Day);
|
|
||||||
}
|
|
||||||
|
|
||||||
///<summary>
|
|
||||||
/// 取得某月的最后一天
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="datetime">要取得月份最后一天的时间</param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static DateTime LastDayOfMonth(this DateTime datetime)
|
|
||||||
{
|
|
||||||
return datetime.AddDays(1 - datetime.Day).AddMonths(1).AddDays(-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得某月第一天0点以及最后一天的23:59:59时间范围
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="datetime"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static Tuple<DateTime, DateTime> GetMonthDateRange(this DateTime datetime)
|
|
||||||
{
|
|
||||||
var lastDayOfMonthDate = LastDayOfMonth(datetime);
|
|
||||||
return new Tuple<DateTime, DateTime>(datetime.FirstDayOfMonth(), new DateTime(lastDayOfMonthDate.Year, lastDayOfMonthDate.Month, lastDayOfMonthDate.Day, 23, 59, 59));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得某一天0点到当月最后一天的23:59:59时间范围
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="datetime"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static Tuple<DateTime, DateTime> GetCurrentDateToLastDayRange(this DateTime datetime)
|
|
||||||
{
|
|
||||||
var lastDayOfMonthDate = LastDayOfMonth(datetime);
|
|
||||||
return new Tuple<DateTime, DateTime>(datetime.Date, new DateTime(lastDayOfMonthDate.Year, lastDayOfMonthDate.Month, lastDayOfMonthDate.Day, 23, 59, 59));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 取得某一天0点到23:59:59时间范围
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="datetime"></param>
|
|
||||||
/// <returns></returns>
|
|
||||||
public static Tuple<DateTime, DateTime> GetCurrentDateRange(this DateTime datetime)
|
|
||||||
{
|
|
||||||
return new Tuple<DateTime, DateTime>(datetime.Date, new DateTime(datetime.Year, datetime.Month, datetime.Day, 23, 59, 59));
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 获取指定枚举的所有 Attribute 说明以及value组成的键值对
|
/// 获取指定枚举的所有 Attribute 说明以及value组成的键值对
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user