반응형
배열 또는 두 날짜 사이의 모든 날짜 목록 만들기
X축을 따라 날짜가 표시된 다중 시계열 그래프를 생성하고 있습니다.
문제는 그래프의 모든 열에서 날짜 범위의 날짜가 동일하지 않다는 것입니다.즉, 2월 1일부터 4월 30일까지를 선택하면 한 시리즈는 2월 1일부터 3월 말까지 데이터를 가질 수 있지만 다른 시리즈는 전체 날짜 범위에 대한 데이터를 가질 수 있습니다.
이렇게 하면 작성해야 할 차트가 왜곡됩니다.Go, 쿼리 시작 시 날짜 범위를 지정하면 날짜 목록을 생성하고 그래프로 표시할 데이터를 채우고 데이터가 없는 날짜에 대해 0으로 시리즈를 채웁니다.
LINQ:
Enumerable.Range(0, 1 + end.Subtract(start).Days)
.Select(offset => start.AddDays(offset))
.ToArray();
루프의 경우:
var dates = new List<DateTime>();
for (var dt = start; dt <= end; dt = dt.AddDays(1))
{
dates.Add(dt);
}
편집: 시계열의 기본값으로 값을 채우는 경우, 완전한 날짜 범위에 있는 모든 날짜를 열거하여 해당 날짜 값이 있으면 해당 시리즈에서 직접 날짜 값을 선택할 수 있습니다. 그렇지 않으면 기본값을 선택할 수 있습니다.예를 들어 다음과 같습니다.
var paddedSeries = fullDates.ToDictionary(date => date, date => timeSeries.ContainsDate(date)
? timeSeries[date] : defaultValue);
public static IEnumerable<DateTime> GetDateRange(DateTime startDate, DateTime endDate)
{
if (endDate < startDate)
throw new ArgumentException("endDate must be greater than or equal to startDate");
while (startDate <= endDate)
{
yield return startDate;
startDate = startDate.AddDays(1);
}
}
오래된 투고인 것은 알지만 확장 방법을 사용해 보십시오.
public static IEnumerable<DateTime> Range(this DateTime startDate, DateTime endDate)
{
return Enumerable.Range(0, (endDate - startDate).Days + 1).Select(d => startDate.AddDays(d));
}
이렇게 해서
var dates = new DateTime(2000, 1, 1).Range(new DateTime(2000, 1, 31));
2000년 1월로 제한하지 않아도 되니 자유롭게 날짜를 정하세요.
상주 마에스트로 Jon Sket은 DateTimes 및 기타 유형에 대해 이를 수행할 수 있는 훌륭한 Range 클래스를 보유하고 있습니다.
언급URL : https://stackoverflow.com/questions/3738748/create-an-array-or-list-of-all-dates-between-two-dates
반응형
'programing' 카테고리의 다른 글
목록에서 고유한 값 목록을 가져옵니다. (0) | 2023.04.11 |
---|---|
cURL이 에러 「(23) Failed write body」를 반환하는 이유는 무엇입니까? (0) | 2023.04.11 |
EventTrigger를 사용하여 속성 설정 (0) | 2023.04.11 |
문자열 배열에 문자열이 포함되어 있는지 확인하기 위해 C# 사용 (0) | 2023.04.11 |
명령어를 WPF 텍스트블록에 추가하려면 어떻게 해야 하나요? (0) | 2023.04.11 |