Добавьте или Сумма часов как 13: 30 + 00: 00: 20 = 13: 30: 20, но как? - PullRequest
6 голосов
/ 04 февраля 2009

Я хочу добавить секунды (00:00:02) или минуты (00:00:20) к значению даты и времени (может быть сохранен тип строки), но как? Примеры:

13:30+02:02:02= 15:32:02 ,
13:30+00:00:01= 13:30:01 ,
13:30+00:01:00=13:31:00 or 13:30 (not important) 

Вы можете мне помочь? Мне нужен твой крутой алгоритм :) Еще раз спасибо ...

Ответы [ 9 ]

9 голосов
/ 04 февраля 2009
myDateTimeVariable.Add(new TimeSpan(2,2,2));
4 голосов
/ 04 февраля 2009

Если вы решите использовать TimeSpan, помните о части дней:

TimeSpan t1 = TimeSpan.Parse("23:30");
TimeSpan t2 = TimeSpan.Parse("00:40:00");
TimeSpan t3 = t1.Add(t2);
Console.WriteLine(t3); // 1.00:10:00

С датой:

DateTime d1 = DateTime.Parse("23:30");
DateTime d2 = DateTime.Parse("00:40:00");
DateTime d3 = d1.Add(d2.TimeOfDay); 
Console.WriteLine(d3.TimeOfDay); // 00:10:00
4 голосов
/ 04 февраля 2009

Добавление двух datetime из строк:

var result = DateTime.Parse(firstDate) + DateTime.Parse(secondDate);

Добавление строкового времени к дате и времени:

var result = existingDateTime.Add(TimeSpan.Parse(stringTime);

Добавление времени, как в вашем примере:

var result = TimeSpan.Parse("12:30:22") + TimeSpan.Parse("11:20:22");

Наконец, ваш пример как даты (не проверено!):

var result = DateTime.Parse("12:30:22") + DateTime.Parse("11:20:22");

Обратите внимание, что это неаккуратное кодирование, но вы поняли идею. Вам нужно как-то проверить, что строка действительно разбирается.

2 голосов
/ 04 февраля 2009

Проблема более абстрактна. Как уже упоминалось, в .NET есть два типа - DateTime и TimeSpan. Тип DateTime представляет определенный момент времени. Это не интервал времени. Это определенное место во все времена с момента рождения Вселенной. Даже если вы установите компоненты год / месяц / день равными 0, они все равно будут представлять некоторый абсолютный момент времени. Не долго.

С другой стороны, TimeSpan представляет некоторый интервал. 1 минута, 2 дня, что угодно. НЕ указано, КОГДА, КАК ДОЛГО.

Таким образом, если бы вы вычли два объекта DateTime, вы бы получили объект TimeSpan, который указывает, сколько времени между ними. И если вы добавите TimeSpan к DateTime, вы получите другой DateTime. Но вы не можете добавить DateTime к другому DateTime - это не имеет смысла.

Мне кажется, что вы должны работать с TimeSpan s все время, потому что вы имеете дело с отрезками времени, а не с абсолютными точками во времени. Если вы получаете эти длины из вашего источника как DateTime, то это на самом деле не правильно, и вы должны как-то преобразовать их в TimeSpan s. Метод синтаксического анализа является одним из предложенных способов, но вы также можете попытаться вычесть из него ноль DateTime. Это может быть быстрее и более независимым от культуры.

2 голосов
/ 04 февраля 2009

Не совсем уверен, что вы ищете, но вы не можете просто использовать встроенные функции для объекта DateTime в C #?

DateTime myDate = DateTime.Now;

myDate = myDate.AddHours(1);
myDate = myDate.AddMinutes(30);
myDate = myDate.AddSeconds(45);
1 голос
/ 04 февраля 2009

Вы должны взглянуть на TimeSpan.Parse . Это преобразует строку в объект TimeSpan. Таким образом, вы можете делать такие вещи, как

TimeSpan a = TimeSpan.Parse(timeStringA)+TimeSpan.Parse(TimeStringB);

Чтобы разбить строку как «00: 00: 20 + 00: 01: 00», посмотрите на string.split

stringA = timeSting.split('+')[0];
stringb = timeSting.split('+')[1];
1 голос
/ 04 февраля 2009

использовать структуру TimeSpan. Вы можете добавить TimeSpans вместе или добавить TimeSpan к DateTime, чтобы создать новый DateTime.

0 голосов
/ 23 марта 2015
    static void Main(string[] args)
    {
        String timeText = "3/23/2015 12:00:13 AM"; 
        String timeText2 = "3/23/2015 1:45:03 AM"; 

        DateTime time = Convert.ToDateTime(timeText);
        string temp = time.ToString("HH:mm:ss");

        DateTime time2 = Convert.ToDateTime(timeText2);
        string temp2 = time2.ToString("HH:mm:ss");

        TimeSpan t1 = TimeSpan.Parse(temp);
        TimeSpan t2 = TimeSpan.Parse(temp2);

        Console.Out.WriteLine(t1 + t2);  // 01:45:16

        Console.ReadLine();
    }
0 голосов
/ 07 августа 2012
return string.Format("{0}:{1}:{2}", mytimespan.Hours 
    + (mytimespan.Days*24),mytimespan.Minutes,mytimespan.Seconds);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...