Datetime из строк, добавляющих время и дату отдельно - PullRequest
0 голосов
/ 10 декабря 2018

Я получаю части даты и времени в двух строковых полях. Я использую следующее для преобразования даты в дату и время, которое работает, но как добавить элемент времени в 24-часовой формат.Вы увидите два приведенных ниже значения, означающих, что он был заказан 8/12/18 по адресу 0908

. Используя следующее, как бы я прикрепил элемент времени 0808 в 24-часовом формате, чтобы получить действительный результат даты и времени.

DateTime dt = DateTime.ParseExact(
   TrasnactionDate, 
  "ddMMyy", 
   System.Globalization.CultureInfo.InvariantCulture);

string outp = dt.ToString("yyyy/MM/dd");

Элемент времени хранится в переменной с именем TransactionTime строки.

Таким образом, конечным результатом будет допустимое время даты, которое мне требуется.

"081218","0908",

"071218","0919",

Редактировать 2 Хорошо. Я попытался добавить их, как указано ниже, но у меня нулевая дата

 DateTime dt = DateTime.ParseExact(TrasnactionDate + TransactionTime, "ddMMyy", System.Globalization.CultureInfo.InvariantCulture);
            string outp = dt.ToString("yyyy/MM/dd HH:mm");

Результат - 0001/01/01 00:00, тогда он должен быть 2018/08/ 12 09: 08

Редактировать 3 Теперь у меня есть следующее:

 DateTime totalDateTime = DateTime.ParseExact(TrasnactionDate, "ddMMyy", CultureInfo.InvariantCulture) +
DateTime.ParseExact(TransactionTime, "HHmm", CultureInfo.InvariantCulture).TimeOfDay; 
string outp = totalDateTime.ToString("yyyyMMdd HH:mm:ss");

Но мне нужно это в формате

yyyyMMdd HH:mm

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

20181211 09: 08: 00

Редактировать 4

Чтобы показать, что поле является действительнымполе даты и времени в sql

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Попробуйте разобрать часть даты как DateTime, но часть времени как TimeSpan;затем вы можете добавить обе части:

string TrasnactionDate = "081218";
string TrasnactionTime = "0908";

DateTime dt = 
  DateTime.ParseExact(TrasnactionDate, "ddMMyy", CultureInfo.InvariantCulture) +
  TimeSpan.ParseExact(TrasnactionTime, "hhmm", CultureInfo.InvariantCulture);

Редактировать: Другая возможность

// HH - we use 24 hours time representation (see juharr's comment) 
DateTime dt = 
  DateTime.ParseExact(TrasnactionDate, "ddMMyy", CultureInfo.InvariantCulture) +
  DateTime.ParseExact(TrasnactionTime, "HHmm", CultureInfo.InvariantCulture).TimeOfDay;

Демо:

var tests = new string[][] {
  new string[] { "081218", "0908"},
  new string[] { "071218", "0919"},
};

DateTime[] result = tests
  .Select(line => new {
    TrasnactionDate = line[0],
    TrasnactionTime = line[1],
  })
  .Select(item => 
     DateTime.ParseExact(item.TrasnactionDate, 
                        "ddMMyy", 
                         CultureInfo.InvariantCulture) +
     DateTime.ParseExact(item.TrasnactionTime, 
                        "HHmm", 
                         CultureInfo.InvariantCulture).TimeOfDay)
  .ToArray();

  string report = string.Join(Environment.NewLine, result
    .Select(date => $"{date:yyyy/MM/dd HH:mm}"));

Результат:

2018/12/08 09:08
2018/12/07 09:19
0 голосов
/ 10 декабря 2018

Почему бы просто не выполнить конкатата перед синтаксическим анализом?

var dateTimeStr = TransactionDate + TransactionTime;
var result = DateTime.ParseExact(dateTimeStr, "ddMMyyHHmm", CultureInfo.InvariantCulture);

Другой способ:

var result = DateTime.ParseExact(TransactionDate, "ddMMyy", CultureInfo.InvariantCulture)
+ TimeSpan.ParseExact(TransactionTime, "hhmm", CultureInfo.InvariantCulture);

После этого вы можете вывести любой формат строки, который вам нравится:

result.ToString("yyyyMMdd HH:mm", CultureInfo.InvariantCulture);
// 20181211 09:08

result.ToString("yyyyMMdd HH:mm:ss", CultureInfo.InvariantCulture);
// 20181211 09:08:00

result.ToString("yyyy-MM-dd HH:mm:ss", CultureInfo.InvariantCulture);
// 2018-12-11 09:08:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...