2011-02-15 113 views
77

如何在C#中将DateTime设置为月份的第一个月?将DateTime设置为月份开始

+0

本月开始? – 2011-02-15 10:36:22

+1

所以要了解它,..每个月的日期都以1开头..他想知道本月开始的日子 – 2011-02-15 10:37:31

+0

如果我们在1月份,它应该显示2011年1月1日和2月,然后01-Feb-2011 – learning 2011-02-15 10:38:23

回答

171
var now = DateTime.Now; 
var startOfMonth = new DateTime(now.Year,now.Month,1); 
+52

小费:总是把`DateTime。现在`变成一个变量,并使用它,如果你要重复使用该值。如果此代码正好在午夜左右执行,则出现错误的可能性很小;对'DateTime.Now`的两次调用可能会在午夜的每一侧发生,从而导致可能的奇怪效果。 – 2011-02-15 10:43:16

+0

好点。我认为在新年前夕午夜是可能导致问题的时间。 – 2011-02-15 10:48:09

2
DateTime now = DateTime.Now; 
DateTime date = new DateTime(now.Year, now.Month, 1); 

您可以用别的代替DateTime.Now

38

像这样的工作

DateTime firstDay = DateTime.Today.AddDays(1 - DateTime.Today.Day); 
0

这应该是高效的和正确的:

DateTime RoundDateTimeToMonth(DateTime time) 
{ 
    long ticks = time.Ticks; 
    return new DateTime((ticks/TimeSpan.TicksPerDay - time.Day + 1) * TimeSpan.TicksPerDay, time.Kind); 
} 

这里ticks/TimeSpan.TicksPerDay re将达到给定的time- time.Day + 1的整数天数重置为月初。

7

有点迟到了,但这里是没有的伎俩,我

public static class DateTimeExtensions 
{ 
    public static DateTime FirstDayOfMonth(this DateTime dt) 
    { 
    return new DateTime(dt.Year, dt.Month, 1); 
    } 
} 
4
public static DateTime FirstDayOfMonth(this DateTime current) 
{ 
    return current.AddDays(1 - current.Day); 
} 
0

扩展方法我刚刚创建基于尼克的答案和一些扩展方法人对SO

public static class DateTimeExtensions 
    { 
     /// <summary> 
     /// get the datetime of the start of the week 
     /// </summary> 
     /// <param name="dt"></param> 
     /// <param name="startOfWeek"></param> 
     /// <returns></returns> 
     /// <example> 
     /// DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Monday); 
     /// DateTime dt = DateTime.Now.StartOfWeek(DayOfWeek.Sunday); 
     /// </example> 
     /// <remarks>http://stackoverflow.com/a/38064/428061</remarks> 
     public static DateTime StartOfWeek(this DateTime dt, DayOfWeek startOfWeek) 
     { 
      var diff = dt.DayOfWeek - startOfWeek; 
      if (diff < 0) 
       diff += 7; 

      return dt.AddDays(-1 * diff).Date; 
     } 

     /// <summary> 
     /// get the datetime of the start of the month 
     /// </summary> 
     /// <param name="dt"></param> 
     /// <returns></returns> 
     /// <remarks>http://stackoverflow.com/a/5002582/428061</remarks> 
     public static DateTime StartOfMonth(this DateTime dt) 
     { 
      var now = DateTime.Now; 
      return new DateTime(now.Year, now.Month, 1); 
     } 

     /// <summary> 
     /// get datetime of the start of the year 
     /// </summary> 
     /// <param name="dt"></param> 
     /// <returns></returns> 
     public static DateTime StartOfYear(this DateTime dt) 
     { 
      var now = DateTime.Now; 
      return new DateTime(now.Year, 1, 1); 
     } 
    } 
-1
var currentDate = DateTime.UtcNow.Date; 
var startDateTimeOfCurrentMonth = currentDate.AddDays(-(currentDate.Day - 1)); 
0

希望这有助于你。

textbox1.Text =“01-”+ DateTime.Now.ToString(“MMM-yyyy”);

相关问题