Как получить то же время и день в следующем месяце, используя DateTime в c #

2

У меня есть объект С# DateTime, и мне нужно увеличить его на один месяц.

Пример:

input           output
-------------------------------
Jan 12, 2005    Feb 12, 2005
Feb 28, 2009    Mar 28, 2009
Dec 31, 2009    Jan 31, 2010
Jan 29, 2000    Feb 29, 2000
Jan 29, 2100    Error: no Feb 29, 2100

Каков наилучший способ сделать это.

Моя первая мысль (кроме некоторого встроенного кода) заключалась в том, чтобы построить новую DateTime из кусков и обработать рулон до года.

Теги:
datetime

3 ответа

6
Лучший ответ

Здесь представлена ​​полная программа, показывающая примеры, приведенные в вопросе. Вероятно, вы захотите использовать исключение в OneMonthAfter, если это действительно не следует так называть.

using System;
using System.Net;

public class Test
{
    static void Main(string[] args)
    {
        Check(new DateTime(2005, 1, 12));
        Check(new DateTime(2009, 2, 28));
        Check(new DateTime(2009, 12, 31));
        Check(new DateTime(2000, 1, 29));
        Check(new DateTime(2100, 1, 29));
    }

    static void Check(DateTime date)
    {
        DateTime? next = OneMonthAfter(date);
        Console.WriteLine("{0} {1}", date,
                          next == null ? (object) "Error" : next);
    }

    static DateTime? OneMonthAfter(DateTime date)
    {
        DateTime ret = date.AddMonths(1);
        if (ret.Day != date.Day)
        {
            // Or throw an exception
            return null;
        }
        return ret;
    }
}
  • 0
    Кевин получил награду за самое быстрое оружие (я принял это, прежде чем кто-то даже прокомментировал это). В результате его ответ дал мне информацию, которая мне нужна, даже если она не была полностью правильной.
1

Это работает для меня:

    DateTime d = DateTime.Now;
    d.AddMonths(1);
  • 0
    Это получает вас в тот же день месяца, а не в тот же день. Таким образом, если первый понедельник июня 2017 года - 5 июня 2017 года, вернется первая среда июля (5 июля 2017 года). Как бы я добрался до первого понедельника июля.
1
using System;

public static class Test
{
    public static void Main()
    {
        string[] dates = { "Jan 12, 2005", "Feb 28, 2009", "Dec 31, 2009", "Jan 29, 2000", "Jan 29, 2100" };
        foreach (string date in dates)
        {
            DateTime t1 = DateTime.Parse(date);
            DateTime t2 = t1.AddMonths(1);
            if (t1.Day != t2.Day)
                Console.WriteLine("Error: no " + t2.ToString("MMM") + " " + t1.Day + ", " + t2.Year);
            else
                Console.WriteLine(t2.ToString("MMM dd, yyyy"));
        }
        Console.ReadLine();   
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню