本文整理汇总了C#中DateTimeOffset.ToEndOfDay方法的典型用法代码示例。如果您正苦于以下问题:C# DateTimeOffset.ToEndOfDay方法的具体用法?C# DateTimeOffset.ToEndOfDay怎么用?C# DateTimeOffset.ToEndOfDay使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类DateTimeOffset
的用法示例。
在下文中一共展示了DateTimeOffset.ToEndOfDay方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: GetErrorStackStatsByMinuteBlock
public StackStatsResult GetErrorStackStatsByMinuteBlock(string errorStackId, TimeSpan utcOffset, DateTime? localStartDate = null, DateTime? localEndDate = null, DateTime? retentionStartDate = null) {
if (localStartDate == null)
localStartDate = new DateTime(2012, 1, 1);
if (localEndDate == null)
localEndDate = DateTime.UtcNow.Add(utcOffset);
localStartDate = localStartDate.Value.Floor(TimeSpan.FromMinutes(15));
localEndDate = localEndDate.Value.Ceiling(TimeSpan.FromMinutes(15));
if (retentionStartDate.HasValue)
retentionStartDate = retentionStartDate.Value.Floor(TimeSpan.FromMinutes(15));
if (localEndDate.Value <= localStartDate.Value)
throw new ArgumentException("End date must be greater than start date.", "localEndDate");
DateTime utcStartDate = new DateTimeOffset(localStartDate.Value.Ticks, utcOffset).UtcDateTime;
DateTime utcEndDate = new DateTimeOffset(localEndDate.Value.Ticks, utcOffset).UtcDateTime;
List<DayStackStats> results = _dayStackStats.Collection.Find(Query.And(Query.GTE(MonthStackStatsRepository.FieldNames.Id, GetDayStackStatsId(errorStackId, utcStartDate)), Query.LTE(MonthStackStatsRepository.FieldNames.Id, GetDayStackStatsId(errorStackId, utcEndDate)))).ToList();
if (results.Count > 0) {
DayStackStats firstWithOccurrence = results.OrderBy(r => r.Id).FirstOrDefault(r => r.MinuteStats.Any(ds => ds.Value > 0));
if (firstWithOccurrence != null) {
DateTime firstErrorDate = firstWithOccurrence.GetDateFromMinuteStatKey(firstWithOccurrence.MinuteStats.OrderBy(ds => Int32.Parse(ds.Key)).First(ds => ds.Value > 0).Key);
if (utcStartDate < firstErrorDate)
utcStartDate = firstErrorDate;
}
}
var dayDocDates = new List<DateTime>();
DateTime currentDay = utcStartDate;
DateTime endOfDayEndDate = utcEndDate.ToEndOfDay();
while (currentDay <= endOfDayEndDate) {
dayDocDates.Add(currentDay);
currentDay = currentDay.AddDays(1);
}
// add missing day documents
foreach (DateTime dayDocDate in dayDocDates) {
if (!results.Exists(d => d.Id == GetDayStackStatsId(errorStackId, dayDocDate)))
results.Add(CreateBlankDayStackStats(dayDocDate, errorStackId));
}
// fill out missing minute blocks with blank stats
foreach (DayStackStats r in results) {
const int minuteBlocksInDay = 96;
for (int i = 0; i <= minuteBlocksInDay - 1; i++) {
int minuteBlock = i * 15;
if (!r.MinuteStats.ContainsKey(minuteBlock.ToString("0000")))
r.MinuteStats.Add(minuteBlock.ToString("0000"), 0);
}
}
var minuteBlocks = new List<KeyValuePair<DateTime, int>>();
minuteBlocks = results.Aggregate(minuteBlocks, (current, result) => current.Concat(result.MinuteStats.ToDictionary(kvp => result.GetDateFromMinuteStatKey(kvp.Key), kvp => kvp.Value)).ToList())
.Where(kvp => kvp.Key >= utcStartDate && kvp.Key <= utcEndDate).OrderBy(kvp => kvp.Key).ToList();
int totalLimitedByPlan = retentionStartDate != null && utcStartDate < retentionStartDate ? minuteBlocks.Count(kvp => kvp.Key < retentionStartDate) : 0;
if (totalLimitedByPlan > 0)
minuteBlocks = minuteBlocks.Where(kvp => kvp.Key >= retentionStartDate).ToList();
// group data points by a timespan to limit the number of returned data points
TimeSpan groupTimeSpan = TimeSpan.FromMinutes(15);
if (minuteBlocks.Count > 50) {
DateTime first = minuteBlocks.Min(m => m.Key);
DateTime last = minuteBlocks.Max(m => m.Key);
TimeSpan span = last - first;
groupTimeSpan = TimeSpan.FromMinutes(((int)Math.Round(span.TotalMinutes / 50 / 15.0)) * 15);
}
var stats = new StackStatsResult {
TotalLimitedByPlan = totalLimitedByPlan,
StartDate = utcStartDate,
EndDate = utcEndDate,
Total = minuteBlocks.Sum(kvp => kvp.Value),
Stats = minuteBlocks.GroupBy(s => s.Key.Floor(groupTimeSpan)).Select(kvp => new DateStackStatsResult {
Date = kvp.Key,
Total = kvp.Sum(b => b.Value)
}).ToList()
};
stats.ApplyTimeOffset(utcOffset);
return stats;
}
示例2: GetProjectErrorStatsByMinuteBlock
public ProjectErrorStatsResult GetProjectErrorStatsByMinuteBlock(string projectId, TimeSpan utcOffset, DateTime? localStartDate = null, DateTime? localEndDate = null, DateTime? retentionStartDate = null, bool includeHidden = false, bool includeFixed = false, bool includeNotFound = true) {
if (localStartDate == null)
localStartDate = new DateTime(2012, 1, 1);
if (localEndDate == null)
localEndDate = DateTime.UtcNow.Add(utcOffset);
// round date range to blocks of 15 minutes since stats are per 15 minute block
localStartDate = localStartDate.Value.Floor(TimeSpan.FromMinutes(15));
localEndDate = localEndDate.Value.Ceiling(TimeSpan.FromMinutes(15));
if (retentionStartDate.HasValue)
retentionStartDate = retentionStartDate.Value.Floor(TimeSpan.FromMinutes(15));
if (localEndDate.Value <= localStartDate.Value)
throw new ArgumentException("End date must be greater than start date.", "localEndDate");
DateTime utcStartDate = new DateTimeOffset(localStartDate.Value.Ticks, utcOffset).UtcDateTime;
DateTime utcEndDate = new DateTimeOffset(localEndDate.Value.Ticks, utcOffset).UtcDateTime;
List<DayProjectStats> results = _dayProjectStats.Collection.Find(Query.And(
Query.GTE(MonthProjectStatsRepository.FieldNames.Id, GetDayProjectStatsId(projectId, utcStartDate)),
Query.LTE(MonthProjectStatsRepository.FieldNames.Id, GetDayProjectStatsId(projectId, utcEndDate))
)).ToList();
if (results.Count > 0) {
DayProjectStats firstWithOccurrence = results.OrderBy(r => r.Id).FirstOrDefault(r => r.MinuteStats.Any(ds => ds.Value.Total > 0));
if (firstWithOccurrence != null) {
DateTime firstErrorDate = firstWithOccurrence.GetDateFromMinuteStatKey(firstWithOccurrence.MinuteStats.OrderBy(ds => Int32.Parse(ds.Key)).First(ds => ds.Value.Total > 0).Key);
if (utcStartDate < firstErrorDate)
utcStartDate = firstErrorDate;
}
if (!includeHidden) {
// remove stats from hidden doc ids.
string[] hiddenIds = _errorStackRepository.GetHiddenIds(projectId);
if (hiddenIds.Length > 0)
DecrementDayProjectStatsByStackIds(results, hiddenIds);
}
if (!includeNotFound) {
// remove stats from not found doc ids.
string[] notFoundIds = _errorStackRepository.GetNotFoundIds(projectId);
if (notFoundIds.Length > 0)
DecrementDayProjectStatsByStackIds(results, notFoundIds);
}
if (!includeFixed) {
// remove stats from not found doc ids.
string[] fixedIds = _errorStackRepository.GetFixedIds(projectId);
if (fixedIds.Length > 0)
DecrementDayProjectStatsByStackIds(results, fixedIds);
}
}
var dayDocDates = new List<DateTime>();
DateTime currentDay = utcStartDate;
DateTime endOfDayEndDate = utcEndDate.ToEndOfDay();
while (currentDay <= endOfDayEndDate) {
dayDocDates.Add(currentDay);
currentDay = currentDay.AddDays(1);
}
// add missing day documents
foreach (DateTime dayDocDate in dayDocDates) {
if (!results.Exists(d => d.Id == GetDayProjectStatsId(projectId, dayDocDate)))
results.Add(CreateBlankDayProjectStats(dayDocDate, projectId));
}
// fill out missing minute blocks with blank stats
foreach (DayProjectStats r in results) {
const int minuteBlocksInDay = 96;
for (int i = 0; i <= minuteBlocksInDay - 1; i++) {
int minuteBlock = i * 15;
if (!r.MinuteStats.ContainsKey(minuteBlock.ToString("0000")))
r.MinuteStats.Add(minuteBlock.ToString("0000"), new ErrorStatsWithStackIds());
}
}
var minuteBlocks = new List<KeyValuePair<DateTime, ErrorStatsWithStackIds>>();
minuteBlocks = results.Aggregate(minuteBlocks, (current, result) => current.Concat(result.MinuteStats.ToDictionary(kvp => result.GetDateFromMinuteStatKey(kvp.Key), kvp => kvp.Value)).ToList())
.Where(kvp => kvp.Key >= utcStartDate && kvp.Key <= utcEndDate).OrderBy(kvp => kvp.Key).ToList();
int totalLimitedByPlan = retentionStartDate != null && utcStartDate < retentionStartDate
? minuteBlocks.Where(kvp => kvp.Key < retentionStartDate).SelectMany(kvp => kvp.Value.ErrorStackIds.Select(s => s.Key)).Distinct()
.Except(minuteBlocks.Where(kvp => kvp.Key >= retentionStartDate).SelectMany(kvp => kvp.Value.ErrorStackIds.Select(s => s.Key)).Distinct())
.Count()
: 0;
if (totalLimitedByPlan > 0)
minuteBlocks = minuteBlocks.Where(kvp => kvp.Key >= retentionStartDate).ToList();
// group data points by a timespan to limit the number of returned data points
TimeSpan groupTimeSpan = TimeSpan.FromMinutes(15);
if (minuteBlocks.Count > 50) {
DateTime first = minuteBlocks.Min(m => m.Key);
DateTime last = minuteBlocks.Max(m => m.Key);
TimeSpan span = last - first;
groupTimeSpan = TimeSpan.FromMinutes(((int)Math.Round(span.TotalMinutes / 50 / 15.0)) * 15);
}
//.........这里部分代码省略.........