在c#中获取GetWeekOfYear的日期?
我有一个函数,它给我(对于当前日期)-它的周数: 因此:在c#中获取GetWeekOfYear的日期?,c#,.net,datetime,.net-4.0,cultureinfo,C#,.net,Datetime,.net 4.0,Cultureinfo,我有一个函数,它给我(对于当前日期)-它的周数: 因此:DateTime(2009,1,1) 回答:1 和:DateTime(2009,1,4) 回答:2 现在,我需要一个函数,它为我提供此值的startDate&&endDate: so for week #1 -> 1/1/2009 ---> 1/3/2009 so for week #2 -> 1/4/2009 ---> 1/10/2009 因此:我有一个函数,它给我指定日期的星期数。 但本周的时间跨度为
DateTime(2009,1,1)
回答:1
和:DateTime(2009,1,4)
回答:2
现在,我需要一个函数,它为我提供此值的startDate&&endDate:
so for week #1 -> 1/1/2009 ---> 1/3/2009
so for week #2 -> 1/4/2009 ---> 1/10/2009
因此:我有一个函数,它给我指定日期的星期数。
但本周的时间跨度为x--->y
我需要那些x和y
谢谢
p、 我一直在寻找这样的函数,但没有找到:-(我曾经使用过本文评论中描述的一种方法
使用系统;
利用制度全球化;
公共静态类FirstDayOfWeekUtility
{
///
///返回指定日期所在周的第一天
///日期在使用当前区域性中。
///
公共静态DateTime GetFirstDayOfWeek(DateTime dayInWeek)
{
CultureInfo defaultCultureInfo=CultureInfo.CurrentCulture;
返回GetFirstDateOfWeek(dayInWeek,defaultCultureInfo);
}
///
///返回指定日期所在周的第一天
///他在。
///
公共静态DateTime GetFirstDayOfWeek(DateTime dayInWeek,CultureInfo CultureInfo)
{
DayOfWeek firstDay=cultureInfo.DateTimeFormat.FirstDayOfWeek;
DateTime firstDayInWeek=dayInWeek.Date;
while(firstDayInWeek.DayOfWeek!=第一天)
firstDayInWeek=firstDayInWeek.AddDays(-1);
每周第一天返回;
}
}
按日期获取一周中的第一天:
static DateTime GetFirstDayOfWeek(DateTime date)
{
var firstDayOfWeek = date.AddDays(-((date.DayOfWeek - DayOfWeek.Sunday + 7) % 7));
if (firstDayOfWeek.Year != date.Year)
firstDayOfWeek = new DateTime(date.Year, 1, 1);
return firstDayOfWeek;
}
一周的最后一天也是这样:
static DateTime GetLastDayOfWeek(DateTime date)
{
var lastDayOfWeek = date.AddDays((DayOfWeek.Saturday - date.DayOfWeek + 7) % 7);
if (lastDayOfWeek.Year != date.Year)
lastDayOfWeek = new DateTime(date.Year, 12, 31);
return lastDayOfWeek;
}
罗伊的补充(最终):
扩展方法,该方法提供从单个日期开始的所有详细信息(周详细信息):
p、 美国每周第一天=星期日
public class DateTimeSpan
{
public DateTime WeekStartDate;
public DateTime WeekEndDate;
public DateTime MonthStartDate;
public DateTime MonthEndDate;
public DateTime YearStartDate;
public DateTime YearEndDate;
public int WeekNum;
}
public static DateTimeSpan TimeProperties(this DateTime str)
{
if (str == null) return null;
DateTimeSpan dts = new DateTimeSpan();
dts.WeekNum= CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(str, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
dts.WeekStartDate = GetFirstDayOfWeek(str);
dts.WeekEndDate = GetLAstDayOfWeek(str);
dts.MonthStartDate = new DateTime(str.Year, str.Month, 1);
int numberOfDays = DateTime.DaysInMonth(str.Year, str.Month);
DateTime last = new DateTime(str.Year, str.Month, numberOfDays);
dts.MonthEndDate = last;
dts.YearStartDate = new DateTime(str.Year, 1, 1);
numberOfDays = DateTime.DaysInMonth(str.Year, 12);
last = new DateTime(str.Year, 12, numberOfDays);
dts.YearEndDate = last;
return dts;
}
static DateTime GetFirstDayOfWeek(DateTime date)
{
var firstDayOfWeek = date.AddDays(-((date.DayOfWeek - DayOfWeek.Sunday + 7) % 7));
if (firstDayOfWeek.Year != date.Year)
firstDayOfWeek = new DateTime(date.Year, 1, 1);
return firstDayOfWeek;
}
static DateTime GetLAstDayOfWeek(DateTime date)
{
var firstDayOfWeek = date.AddDays(((DayOfWeek.Saturday - date.DayOfWeek + 7) % 7));
if (firstDayOfWeek.Year != date.Year)
firstDayOfWeek = new DateTime(date.Year, 12, 31);
return firstDayOfWeek;
}
你想知道某个星期的日期吗?@NikhilAgrawal是的。根据我的例子,第一周从1到3……我看不出有什么问题。你能不能把日期追溯到上一个星期天/下一个星期六,并为那一天在不同的年份添加一个特殊的例外?(没有投票。)@RoyiNamir也许我误解了,我以为你是从一个日期开始的。“1月5日的一周从1月4日到1月10日”,在那里你可以通过查找1月5日之前或当天的最后一个星期日得到“1月4日”,在那里你可以得到“1月10日”通过查找1月5日当天或之后的第一个星期六。@hvd.net函数GetWeekOfYear是正确的。现在我需要根据此函数结果计算日期。+1比我更快找到答案。我在我的应用程序中使用了与我在答案中粘贴的相同的链接代码。
GetFirstDayOfWeek(新日期时间(2009,1,1),新文化信息(“en-US”)。Dump();
给我一个2008年12月28日00:00:00…它错了为什么它错了?一周的第一天从某个日期开始,几周可以跨越几年。对于这种情况,你需要执行一个例外情况;检查计算的日期是否在同一年。如果不是,则获取该年的第一个日期。@FrederikGheysels你读过我的问题?我需要这个:2009年的第1周从1/1开始到1/3结束……第2周从1/4开始到1/10结束……GetFirstDayOfWeek(新的日期时间(2009,1,1),新的文化信息(“en-US”)。Dump();
给我2008年12月28日00:00:00…这是错误的幸运的是你已经删除了GetDayInWeek
。我想我弄错了:如果输入有效,当你请求Y年的最后一周时,它可能会返回Y+1年的第1周的日期。我会处理掉它。
static DateTime GetLastDayOfWeek(DateTime date)
{
var lastDayOfWeek = date.AddDays((DayOfWeek.Saturday - date.DayOfWeek + 7) % 7);
if (lastDayOfWeek.Year != date.Year)
lastDayOfWeek = new DateTime(date.Year, 12, 31);
return lastDayOfWeek;
}
public class DateTimeSpan
{
public DateTime WeekStartDate;
public DateTime WeekEndDate;
public DateTime MonthStartDate;
public DateTime MonthEndDate;
public DateTime YearStartDate;
public DateTime YearEndDate;
public int WeekNum;
}
public static DateTimeSpan TimeProperties(this DateTime str)
{
if (str == null) return null;
DateTimeSpan dts = new DateTimeSpan();
dts.WeekNum= CultureInfo.CurrentCulture.Calendar.GetWeekOfYear(str, CalendarWeekRule.FirstDay, DayOfWeek.Sunday);
dts.WeekStartDate = GetFirstDayOfWeek(str);
dts.WeekEndDate = GetLAstDayOfWeek(str);
dts.MonthStartDate = new DateTime(str.Year, str.Month, 1);
int numberOfDays = DateTime.DaysInMonth(str.Year, str.Month);
DateTime last = new DateTime(str.Year, str.Month, numberOfDays);
dts.MonthEndDate = last;
dts.YearStartDate = new DateTime(str.Year, 1, 1);
numberOfDays = DateTime.DaysInMonth(str.Year, 12);
last = new DateTime(str.Year, 12, numberOfDays);
dts.YearEndDate = last;
return dts;
}
static DateTime GetFirstDayOfWeek(DateTime date)
{
var firstDayOfWeek = date.AddDays(-((date.DayOfWeek - DayOfWeek.Sunday + 7) % 7));
if (firstDayOfWeek.Year != date.Year)
firstDayOfWeek = new DateTime(date.Year, 1, 1);
return firstDayOfWeek;
}
static DateTime GetLAstDayOfWeek(DateTime date)
{
var firstDayOfWeek = date.AddDays(((DayOfWeek.Saturday - date.DayOfWeek + 7) % 7));
if (firstDayOfWeek.Year != date.Year)
firstDayOfWeek = new DateTime(date.Year, 12, 31);
return firstDayOfWeek;
}