Дата и время присоединения к дате и времени в C # - PullRequest
52 голосов
/ 29 июня 2010

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

Ответы [ 8 ]

87 голосов
/ 29 июня 2010

Вы можете сделать это довольно легко:

DateTime dateOnly;
DateTime timeOnly;
...
DateTime combined = dateOnly.Date.Add(timeOnly.TimeOfDay);

TimeOfDay возвращает TimeSpan, который вы затем добавляете к дате.

Изменить (спасибо комментаторам ниже) - для безопасности используйте dateOnly.Date, чтобы обеспечить только часть даты.

64 голосов
/ 29 июня 2010

Как они хранятся?Предполагая, что часть даты сохраняется как DateTime полуночи рассматриваемого дня, а время - TimeSpan, вы можете просто добавить их.

DateTime date = ...;
TimeSpan time = ...;

DateTime result = date + time;
8 голосов
/ 29 июня 2010

Вы можете легко построить TimeSpan из своего поля времени.

Как только вы это сделаете, просто сделайте:

TimeSpan time = GetTimeFieldData();
dateField = dateField.Add(time);
4 голосов
/ 29 июня 2010
Datetime date = new DateTime(Date1.Year, Date1.Month, Date1.Day, Time1.Hour, Time1.Minute, Time1.Second); 
2 голосов
/ 26 ноября 2015

Это должно сделать:

var output = date.Date + time.TimeOfDay;

или

var output = new DateTime(date.Year, date.Month, date.Day,
                          time.Hour, time.Minute, time.Second);

предположим, что обе переменные date и time имеют тип DateTime

2 голосов
/ 29 июня 2010

Вы можете добавить TimeSpan к DateTime и написать что-то вроде этого.

// inside consuming function
ISeriesObject obj = getMyObject();
DateTime dt = getDate(obj) + getTime(obj);

private DateTime getDate(ISeriesObject obj)
{
     //return a DateTime
}


private TimeSpan getTime(ISeriesObject obj)
{
     //return a TimeSpan
}
0 голосов
/ 29 июня 2010

Обратите внимание, что добавление времени к дате не является для вас самой большой проблемой. Как упомянул @Reed Copsey, вы просто создаете DateTime из даты, а затем .Add время.

Однако вам необходимо убедиться, что дата и время iSeries (скорее всего, время Unix) находятся в том же представлении, что и представление .Net. Таким образом, вам, скорее всего, потребуется преобразовать его, добавив его также в DateTime 1 января 1970 года.

0 голосов
/ 29 июня 2010

Не можете ли вы просто отформатировать часть даты и часть времени как отдельные строки, а затем соединить их вместе? Затем вы можете разобрать строку обратно в объект DateTime

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