Як я магу атрымаць радок з ад поля DATETIME ў C #

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

fecha_nacimiento = row[7].ToString().Substring(1,9);

кампілятар гэта не распаўсюджваецца сказаць якую-небудзь памылку, але калі я выканаю я атрымліваю наступнае паведамленне пра памылку:

<�Р> пачатковы індэкс не можа быць даўжэй, што даўжыня радка. </Р>

Я паўтараю, што значэнне радкі [7] .ToString з'яўляецца 11.11.2010 0:00:00

2
Відавочна, яны восьмая радок мае даўжыню 1 або менш
дададзена аўтар apomene, крыніца
Відавочна, яны восьмая радок мае даўжыню 1 або менш
дададзена аўтар apomene, крыніца
Ok дзякуючы v4Vendetta. I'm робіць пятлю і ў мяне ёсць некалькі радкоў з пустым полем. Вялікі дзякуй
дададзена аўтар Mikelon85, крыніца
Ok дзякуючы v4Vendetta. I'm робіць пятлю і ў мяне ёсць некалькі радкоў з пустым полем. Вялікі дзякуй
дададзена аўтар Mikelon85, крыніца
радок [7] .ToString добра працуе, ён мае гэты радок = 2010/11/22 0:00:00
дададзена аўтар Mikelon85, крыніца
радок [7] .ToString добра працуе, ён мае гэты радок = 2010/11/22 0:00:00
дададзена аўтар Mikelon85, крыніца
Што вы спрабуеце атрымаць exaclty? <�Код> DateTime.ToString() дае лепшыя спосабы фарматавання даты
дададзена аўтар Claudio Redi, крыніца
Што вы спрабуеце атрымаць exaclty? <�Код> DateTime.ToString() дае лепшыя спосабы фарматавання даты
дададзена аўтар Claudio Redi, крыніца
Мае думкі дакладна, V4Vendetta! Міквэлон, зрабіце гэта ToString, калі вы атрымаеце выключэнне.
дададзена аўтар Russ Clarke, крыніца
Мае думкі дакладна, V4Vendetta! Міквэлон, зрабіце гэта ToString, калі вы атрымаеце выключэнне.
дададзена аўтар Russ Clarke, крыніца
Што менавіта вы спрабуеце зрабіць? Мы будзем мець патрэбу ў дадатковай інфармацыі, каб дапамагчы вам. Мы можам сказаць вам, што значыць гэтая памылка, але гэта пра гэта.
дададзена аўтар EJC, крыніца
Падобна на тое, што няма нічога ў гэтым радку ў пазіцыі 7.
дададзена аўтар EJC, крыніца
Падобна на тое, што няма нічога ў гэтым радку ў пазіцыі 7.
дададзена аўтар EJC, крыніца
@ Mikelon85 Вы ​​робіце гэта ў цыкле, то, магчыма, для адной з радкоў у ToString() прыводзіць да пусты радку
дададзена аўтар V4Vendetta, крыніца
@ Mikelon85 Вы ​​робіце гэта ў цыкле, то, магчыма, для адной з радкоў у ToString() прыводзіць да пусты радку
дададзена аўтар V4Vendetta, крыніца
Вы праверылі вынік метаду ToString ()? Падобна на тое, што радок пустая. Акрамя таго, памятайце, што доступ радкі з дапамогай метаду падрадка() робяцца з індэксам нулявы асновай. Так што, калі вы хочаце ўключыць у першую падрадок характару выкліку (0, 9).
дададзена аўтар Tobias, крыніца
Вы праверылі вынік метаду ToString ()? Падобна на тое, што радок пустая. Акрамя таго, памятайце, што доступ радкі з дапамогай метаду падрадка() робяцца з індэксам нулявы асновай. Так што, калі вы хочаце ўключыць у першую падрадок характару выкліку (0, 9).
дададзена аўтар Tobias, крыніца
Паспрабуйце выканаць друк з радка [7] .ToString() і паглядзець, што атрымаецца
дададзена аўтар ose, крыніца
Паспрабуйце выканаць друк з радка [7] .ToString() і паглядзець, што атрымаецца
дададзена аўтар ose, крыніца
ён кажа, што радок [7] пусты.
дададзена аўтар mtsiakiris, крыніца
ён кажа, што радок [7] пусты.
дададзена аўтар mtsiakiris, крыніца

7 адказы

Пастаўце кропку супыну на гэтай лініі і дадаць гадзіны для гэтага значэння:

row[7].ToString()

здавалася б мне, што яна пустая.

Гэты код дапаможа злавіць гэта:

string date = row[7].ToString();
if (!String.IsNullOrEmpty(date) && date.Length > 8)
{
    fecha_nacimiento = date.Substring(1,9);
}

Як паказалі каментары, хоць, ёсць больш эфектыўныя спосабы разбору даты!

2
дададзена

Пастаўце кропку супыну на гэтай лініі і дадаць гадзіны для гэтага значэння:

row[7].ToString()

здавалася б мне, што яна пустая.

Гэты код дапаможа злавіць гэта:

string date = row[7].ToString();
if (!String.IsNullOrEmpty(date) && date.Length > 8)
{
    fecha_nacimiento = date.Substring(1,9);
}

Як паказалі каментары, хоць, ёсць больш эфектыўныя спосабы разбору даты!

2
дададзена

Па-першае, гэтая памылка азначае, што ў вас ёсць радок, што гэта альбо пусты, альбо адзін сімвал доўга - гэта не знак у пазіцыі 1 (памятаеце, яны пачынаюць з індэксам 0).

Па-другое, калі дадзеныя ў гэтай вочку з'яўляецца DateTime ўжо, а затым выкарыстоўваць адзін з DateTime метады, каб атрымаць радок ( ToString , ToShortDateString або ToLongDateString ) вам трэба. Як гэта:

fecha_nacimiento = ((DateTime)row[7]).ToShortDateString();

EDIT Casting isn't necessary if you just want to use the ToString method.

У адваротным выпадку, першы сінтаксічнага аналіз яго да DateTime, а затым выкарыстоўваць адзін гэтыя метады.

1
дададзена

Як вы ўжо даказалі, што радок утрымлівае «2010/11/22 0:00:00». выкарыстанне

row[7].ToString("d") which will result in "22/11/2010"

here: http://msdn.microsoft.com/de-de/library/zdtaw1bw(v=vs.80).aspx

[Рэдагаваць] Рэнан правільна, вядома, калі ён сцвярджае, што гэта будзе працаваць толькі калі аб'екты, якія змяшчаюцца ў крыніцы дадзеных маюць тып DateTime. См свой адказ вышэй, а таксама для атрымання больш падрабязнай інфармацыі.

1
дададзена
Гэта будзе працаваць, калі дадзеныя ў вочку з'яўляецца DateTime. Калі гэта радок, якая па супадзенні мае гэты тэкст, гэта будзе прыводзіць да «2010/11/22 0:00:00» зноў.
дададзена аўтар Renan, крыніца
Ты маеш рацыю. Я адрэдагаваў мой адказ адпаведна. З-за назвы пытанняў, я меркаваў, што аб'екты сапраўды маюць тып DateTime.
дададзена аўтар Tobias, крыніца

Вы можаце паспрабаваць выкарыстоўваць шаблон ў метадзе «ToString ()»

Вы можаце выбраць адзін з многіх існуючага фармату. Глядзіце афіцыйную дакументацыю тут

http://msdn.microsoft.com/en- нас/бібліятэка/zdtaw1bw (v = vs.80) .aspx

Як гэта:

string fecha_nacimiento = string.Empty;

if(row[7] != null)
{
   if(row[7].toString() != string.Empty)
   {
       string fecha_nacimiento = row[7].ToString("yyyy-MM-dd hh:mm");
       //OR
       string fecha_nacimiento = row[7].ToString("yyyy-MM-dd");
      //etc...
   }
}
0
дададзена
Так, канечне. Але гэта яшчэ адна праблема. Калі вы выкарыстоўваеце падрадок гэта тая ж самая праблема. Вы можаце праверыць, калі значэнне не з'яўляецца пустым, перш чым атрымаць дату. я рэдагаваць свой адказ
дададзена аўтар Mehdi Bugnard, крыніца
Так, я ведаю. Але, як аўтар згадаў ён спрабуе пераўтварыць з фармату «DateTime»
дададзена аўтар Mehdi Bugnard, крыніца
Вы можаце, але гэта таксама пацерпіць няўдачу, калі радок [7] з'яўляецца Null ці пусты, вядома?
дададзена аўтар Russ Clarke, крыніца
Гэта будзе працаваць, толькі калі гэта ведаць <�я> падчас кампіляцыі , што радок [7] мае тып DateTime. <�Код> аб'ект не мае .ToString() перагрузкі з параметрам фармату.
дададзена аўтар Hans Kesting, крыніца

Вы можаце паспрабаваць выкарыстоўваць шаблон ў метадзе «ToString ()»

Вы можаце выбраць адзін з многіх існуючага фармату. Глядзіце афіцыйную дакументацыю тут

http://msdn.microsoft.com/en- нас/бібліятэка/zdtaw1bw (v = vs.80) .aspx

Як гэта:

string fecha_nacimiento = string.Empty;

if(row[7] != null)
{
   if(row[7].toString() != string.Empty)
   {
       string fecha_nacimiento = row[7].ToString("yyyy-MM-dd hh:mm");
       //OR
       string fecha_nacimiento = row[7].ToString("yyyy-MM-dd");
      //etc...
   }
}
0
дададзена
Так, канечне. Але гэта яшчэ адна праблема. Калі вы выкарыстоўваеце падрадок гэта тая ж самая праблема. Вы можаце праверыць, калі значэнне не з'яўляецца пустым, перш чым атрымаць дату. я рэдагаваць свой адказ
дададзена аўтар Mehdi Bugnard, крыніца
Так, я ведаю. Але, як аўтар згадаў ён спрабуе пераўтварыць з фармату «DateTime»
дададзена аўтар Mehdi Bugnard, крыніца
Вы можаце, але гэта таксама пацерпіць няўдачу, калі радок [7] з'яўляецца Null ці пусты, вядома?
дададзена аўтар Russ Clarke, крыніца
Гэта будзе працаваць, толькі калі гэта ведаць <�я> падчас кампіляцыі , што радок [7] мае тып DateTime. <�Код> аб'ект не мае .ToString() перагрузкі з параметрам фармату.
дададзена аўтар Hans Kesting, крыніца

Гэта азначае, што радок [7] .ToString() мае даўжыню 0.

Проста каб даказаць свой пункт гледжання, калі вы:

string test = string.Empty;

Console.WriteLine(test.Substring(1, 9));

Гэта дасць вам дакладна такое ж паведамленне пра памылку.

0
дададзена