【发布时间】:2010-12-02 07:13:31
【问题描述】:
如何从给定日期找到季度的开始日期和名称(1、2、3 等)?
【问题讨论】:
如何从给定日期找到季度的开始日期和名称(1、2、3 等)?
【问题讨论】:
类似的东西(未经测试):
DateTime date;
int quarterNumber = (date.Month-1)/3+1;
DateTime firstDayOfQuarter = new DateTime(date.Year, (quarterNumber-1)*3+1,1);
DateTime lastDayOfQuarter = firstDayOfQuarter.AddMonths(3).AddDays(-1);
【讨论】:
(quarterNumber-1)*3+1 将给出给定季度第一个月的月份数。该代码为一年中该月的第一天创建一个DateTime。那是本季度的第一天。然后它增加了三个月。这将是下一个季度的第一天,因此通缉季度的最后一天将是前一天(.AddDays(-1) 做到了这一点)。
3+1 而不仅仅是4,有什么原因吗?
((date.Month-1)/3) + 1 和((quarter-1)*3) + 1
var firstDayOfQuarter = new DateTime(date.AddMonths(-3).Year, (quarterNumber-1)*3+1,1);第一天的正确方法
int GetQuarterName(DateTime myDate)
{
return (int)Math.Ceiling(myDate.Month / 3.0);
}
DateTime GetQuarterStartingDate(DateTime myDate)
{
return new DateTime(myDate.Year,(3*GetQuarterName(myDate))-2,1);
}
GetQuarterName获取当前月份数/3的“下一个”整数值。
GetQuarterStartingDate 使用来自 GetQuarterName 的输出来计算月份值、原始日期的年份部分,以及 1 表示要返回的月份的第一天。
(对不起,我感冒了。:()
【讨论】:
https://msdn.microsoft.com/en-us/library/ms127415(v=vs.110).aspx
using Microsoft.VisualBasic;
var quarter = DateAndTime.DatePart(DateInterval.Quarter, (DateTime)dateTimePickerDateTime.Value);
【讨论】:
var date = new DateTime(2015, 3, 15);
var quarter = (date.Month + 2) / 3;
var quarterStartMonth = 3 * quarter - 2;
var quarterStartDate = new DateTime(date.Year, quarterStartMonth, 1);
【讨论】:
我认为这个解决方案会很好用。它占用更多的线路,总线很冗长! `
private DateTime GetFirstDayOfYearlyQuarter(DateTime value)
{
switch (value.Month)
{
case 1:
case 2:
case 3:
return new DateTime(value.Year, 1, 1);
case 4:
case 5:
case 6:
return new DateTime(value.Year, 4, 1);
case 7:
case 8:
case 9:
return new DateTime(value.Year, 7, 1);
case 10:
case 11:
case 12:
return new DateTime(value.Year, 10, 1);
default:
throw new Exception(@"¯\_(ツ)_/¯");
}
}
`
附:这只查找季度的第一天,但您可以轻松扩展它以查找季度数等。
【讨论】:
DateTime date;
int quarterNumber = (date.Month-1)/3+1;
DateTime firstDayOfQuarter = new DateTime(date.Year, (quarterNumber-1)*3+1,1);
DateTime lastDayOfQuarter = firstDayOfQuarter.AddMonths(3).AddDays(-1);
【讨论】:
带有现场演示的更简单的两班轮 here + 按 F8 运行。
var date = DateTime.Now; //Give you own DateTime
int offset = 2, monthsInQtr = 3;
var quarter = (date.Month + offset) / monthsInQtr; //To find which quarter
var totalMonths = quarter * monthsInQtr;
var startDateInQtr = new DateTime(date.Year, totalMonths - offset, 1); //start date in quarter
如果您正在查看本季度的最后一天,请使用 DateTime.DaysInMonth
var endDateInQtr = new DateTime(date.Year, totalMonths, DateTime.DaysInMonth(date.Year, totalMonths));
【讨论】:
public static class DateTimeExtensions
{
public static DateTime StartOfQuarter(this DateTime _date)
{
var quarter = decimal.ToInt16(Math.Ceiling(_date.Month / 3.0m));
return new DateTime(_date.Year, quarter, 1);
}
}
使用
var quarterStart = DateTime.Today.StartOfQuarter();
【讨论】: