C # DateTime: Какую «дату» использовать, когда я использую только «время»? - PullRequest
30 голосов
/ 16 декабря 2008

Я использую DateTime в C # для отображения времени. Какую часть даты каждый использует при построении времени?

например. следующее недопустимо, потому что нет нулевого месяца или нулевого дня:

// 4:37:58 PM
DateTime time = new DateTime(0, 0, 0, 16, 47, 58);

Использую ли я нулевую дату COM?

// 4:37:58 PM
DateTime time = new DateTime(1899, 12, 30, 16, 47, 58);

Или, возможно, SQL Server?

//4:37:58 PM
DateTime time = new DateTime(1900, 1, 1, 16, 47, 58);

Я понимаю, что это произвольно, так как я буду игнорировать части даты в коде, но было бы неплохо иметь возможность использовать:

DateTime duration = time2 - time1;

Ответ

Мне кажется, мне нравится MinValue

 DateTime time = DateTime.MinValue.Date.Add(new TimeSpan(16, 47, 58));

Примечание: Я не могу использовать TimeSpan, потому что это не хранит время суток. И причина, по которой я это знаю, заключается в том, что нет способа отобразить его содержимое как время.

То есть TimeSpan записывает промежуток времени , а не время суток , например ::

TimeSpan t = new TimeSpan(16, 47, 58);
t.ToString();

возвращает промежуток времени в формате часов : минут : секунд , например ::

16:47:58

а не время:

4:47:58 PM    (United States)
04:47:58 nm   (South Africa)
4:47:58.MD    (Albania)
16:47:58      (Algeria)
04:47:58 م    (Bahrain)
PM 4:47:58    (Singapore)
下午 04:47:58  (Taiwan)
04:47:58 PM   (Belize)
4:47:58 p.m.  (New Zealand)
4:47:58 μμ    (Greece)
16.47.58      (Italy)
오후 4:47:58   (Korea)
04:47:58 ب.ظ  (Iran)
ਸ਼ਾਮ 04:47:58   (India)
04:47:58 p.m. (Argentina)
etc

Другими словами, есть разница между временным интервалом и временем. А также осознайте, что TimeSpan не предоставляет механизма для преобразования промежутка времени в время суток - и для этого есть причина.

Ответы [ 12 ]

0 голосов
/ 31 марта 2014

Нет большой разницы по сравнению с принятым ответом. Просто чтобы реализовать идею.

public class TimeOfDay
{
    public DateTime time;
    public TimeOfDay(int Hour, int Minute, int Second)
    {
        time = DateTime.MinValue.Date.Add(new TimeSpan(Hour, Minute, Second));
    }
}
0 голосов
/ 17 декабря 2008

Используйте TimeSpan и сделайте его UTC, если у вас есть проблемы с TimeZone.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...