【问题标题】:How to get the name of each day in next month?如何获取下个月每一天的名称?
【发布时间】:2012-07-02 06:46:08
【问题描述】:
DateTime dt = new DateTime();
dt = DateTime.Now.AddMonths(1);
int x = DateTime.DaysInMonth(dt.Year, dt.Month);
MessageBox.Show(x.ToString());  // works ok - 31

我该怎么说:

foreach (day in dt.Days)
{
string abc = dt.DayOfWeek.ToString();
MessageBox.Show(abc)
}

问题出在第一行 - foreach...

【问题讨论】:

  • 那么你的代码出了什么问题(你需要放在大括号中,以防你想执行循环的两个代码行)
  • 我现在添加了括号

标签: c# winforms datetime


【解决方案1】:

这应该可以完成工作。

DateTime Base = new DateTime(DateTime.Now.Year, DateTime.Now.AddMonths(1).Month, 1);
int x = DateTime.DaysInMonth(Base.Year, Base.Month);
while (Base.Day != x)
{
    Console.WriteLine(Base.DayOfWeek.ToString());
    Base = Base.AddDays(1);
}

【讨论】:

  • 我想指出另一个 Alex 的 LINQ 答案也是完全有效的(在我看来更加优雅),但我不确定两者之间的任何性能差异。
【解决方案2】:

您还可以利用 Enumerable.Range 和 LINQ(以及 DaysOfWeek 枚举)

DateTime dt = DateTime.Now.AddMonths(1);

Enumerable.Range(1, DateTime.DaysInMonth(dt.Year, dt.Month))
    .Select(dayNumber => new DateTime(dt.Year, dt.Month, dayNumber))
    .Select(dayName => dayName.DayOfWeek.ToString()).ToList()
    .ForEach(day => MessageBox.Show(day));

两个.Select()s 可以合并,但为了便于阅读,我将它们分开。

【讨论】:

    【解决方案3】:

    你可以这样做:

    DateTime dt = new DateTime();
    dt = DateTime.Now.AddMonths(1);
    DateTime conditionDateTime = new DateTime(dt.Year, dt.Month,DateTime.DaysInMonth(dt.Year, dt.Month));
    
     for (DateTime dt1 = new DateTime(dt.Year, dt.Month, 1); dt1 <conditionDateTime; dt1 = dt1.AddDays(1))
         {
            Console.Write(dt1.ToShortDateString() + " : ");
            Console.WriteLine(dt1.DayOfWeek);
         }
    

    这会给你

    8/1/2012 : Wednesday
    8/2/2012 : Thursday
    8/3/2012 : Friday
    8/4/2012 : Saturday
    8/5/2012 : Sunday
    8/6/2012 : Monday
    8/7/2012 : Tuesday
    8/8/2012 : Wednesday
    8/9/2012 : Thursday
    8/10/2012 : Friday
    8/11/2012 : Saturday
    8/12/2012 : Sunday
    8/13/2012 : Monday
    8/14/2012 : Tuesday
    8/15/2012 : Wednesday
    8/16/2012 : Thursday
    8/17/2012 : Friday
    ......
    

    【讨论】:

    • 我认为 for 循环条件中的代码在循环的每次迭代中都运行,因此您在每个循环中创建一个新的 DateTime 是否不正确?还有为什么要创建两个 DateTimes dt 和 dt1?
    • @Alex,你是对的,在循环的条件部分,它为每次迭代都这样做,可以通过在循环之前定义条件日期来避免,我只是想给出一个想法,但我会编辑帖子以显示优化
    • @Alex,创建 dt 是为了显示当前日期,创建 dt1 是为了显示下个月的日期,再次只是为了一个想法
    【解决方案4】:

    试试DateTime.ToString(format)方法。

    DateTime dt = new DateTime();
    String dayName=dt.ToString("ddd");
    

    【讨论】:

      【解决方案5】:

      试试这个

      string day = DateTime.Now.ToString("ddd");
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        相关资源
        最近更新 更多