2011-02-15 117 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」);

相關問題