2017-02-15 7 views
0

У меня есть это 2017-02-13T00: 00: 00 + 08: 00 datetime как строка в XML-файле. Я хочу преобразовать его в yyyyMMdd как целое.Преобразование DateTime String в Integer

Это то, что я пробовал:

Integer.Parse(myRow("ENT_DATE").ToString("yyyy") & myRow("ENT_DT").ToString("MM") & myRow("ENT_DT").ToString("dd")) 

Но она возвращает ошибку. Conversion from string "yyyy" to type 'Integer' is not valid.

myRow("ENT_DATE") см 2017-02-13T00:00:00+08:00

ответ

2

Проблема в том, что Item свойство DataRow возвращает Object ссылку, так что вы не набран правильно ToString метод. Этот код должен быть:

CInt(CDate(myRow("ENT_DATE")).ToString("yyyyMMdd")) 

Вы бросили значение поля как тип Date первый, то вы вызываете правильный Date.ToString метод.

+0

Это дает мне '20170212', а не' 20170213', возможно, потому, что CDate принимает часовой пояс (+8), и я в другой часовой пояс (+1). Не может быть проблемой для OP, но все же что-то учитывать. –

+0

Спасибо большое. Спасли мой день ... – FullStack

+0

@PeterB - дата будет изменена в соответствии с часовым поясом .. ?? – FullStack

0

Использование .ToString("yyyy") будет работать только с значением DateTime, а не с строкой.

Самый простой способ, вероятно, просто принимая цифры, которые вам нужно с помощью Left() и Replace(), а затем преобразовать те в значение Integer, например:

CInt(Left(myRow("ENT_DATE"), 10).Replace("-", "")) 

Это производит 20170213 для данный вход, независимо от того, какой часовой пояс установлен для приложения.

+0

Хммм ... Я предполагал, что значение в 'DataTable' было фактически' DateTime', десериализовано из XML. Если это так, ваше решение не сработает, но, возможно, я ошибаюсь, и на самом деле это 'String'. Я предполагаю, что OP должен иметь «Option Strict Off», поэтому, если это был «DateTime», то, вероятно, должен был работать этот поздний вызов. – jmcilhinney

Смежные вопросы