Как получить Timespan от 1 года? - PullRequest
24 голосов
/ 02 декабря 2011

Я хочу получить структуру Timespan, которая представляет год в C #.

Ответы [ 8 ]

41 голосов
/ 02 декабря 2011

Сложность в том, что год зависит от того, с чего он начинается.

Вы можете сделать

DateTime now = DateTime.Now;
TimeSpan span = now.AddYears(1) - now;

Это даст вам 1 year timespan с текущего момента до года спустя

2 голосов
/ 02 декабря 2011

Ключевой вопрос здесь: какой год?

Продолжительность временного интервала, очевидно, зависит от того, является ли нужный год високосным или нет, и когда он начинается.

Если вам нужен год, начиная с сегодняшнего дня, укажите ответ @ sehe.

Если вы хотите текущий год, укажите @ Oyvind,

Если вы хотите получить разумное приближение,может идти с @Nayan или для использования в приближении 365.25:

TimeSpan oneYearSpan = new TimeSpan(365, 6, 0, 0);
1 голос
/ 02 декабря 2011

Если вы хотите быть достаточно точным, вы можете использовать количество наносекунд в году.Я думаю, что это движется на 0,5 секунды каждое столетие, так что должно быть хорошо еще долго!

public TimeSpan MyYear
{
    get
    { 
        // Year = 3.1556926 × 10^16 nanoseconds
        return new TimeSpan(31556926000000000);
    }
}

На этой странице уже есть несколько хороших ответов, это просто еще один вариант.

1 голос
/ 02 декабря 2011

Пример грубый:

TimeSpan oneYearSpan = new TimeSpan(365, 0, 0, 0);

Подойдет ли это?

1 голос
/ 02 декабря 2011
DateTime intialDate = Date.Now.Date;
TimeSpan yearSpan = intialDate.AddYears(1).Subtract(intialDate)

Как уже упоминали другие люди, вы можете подумать о високосных годах. В этом случае вы можете инициировать intialDate соответственно.

1 голос
/ 02 декабря 2011

Вы не можете, поскольку год не имеет фиксированной длины (это 365 или 366 дней или около 365,25?).Вот почему у вас не может быть месяца в качестве TimeSpan (28, 29, 30, 31 день ??)

0 голосов
/ 02 декабря 2011

Вот как это сделать, используя IsLeapYear для определения номера дня.

int span = DateTime.IsLeapYear(1996) ? 366: 365;
var year1996 = new TimeSpan(span, 0, 0, 0);
0 голосов
/ 02 декабря 2011

Это зависит от того, какой год вы хотите изобразить, поскольку не все годы имеют одинаковую длину.

Это способ найти длину 2010 года, например:

var timestamp = new DateTime(2011, 1, 1) - new DateTime(2010, 1, 1);

Измените год в DateTimes, чтобы найти желаемую продолжительность года.

...