Извлечение года из строки и разбор в int - PullRequest
0 голосов
/ 19 апреля 2020

Пример ...

"6/1/1986 24:00,ak,us,light,180,51.88,-176.6580556"

Я пытаюсь извлечь только "1986", но постоянно получаю сообщение об ошибке «Входная строка была в неправильном формате».

string date = data[0];
string year1 = date.Substring(4);
int year = int.Parse(year1);

Ответы [ 3 ]

2 голосов
/ 19 апреля 2020

Если позиция года в строке всегда одинакова - 4-5-6-7 символов, то:

string date = "6/1/1986 24:00,ak,us,light,180,51.88,-176.6580556";
int year = int.Parse(date.Substring(4, 4));

Подстрока

Если формат строки (позиция года) может быть другим, например: «01.06.1986 24:00, ak, us, light, 180.51.88, -176.6580556», то используйте регулярные выражения:

Regex (String)

1 голос
/ 19 апреля 2020

Поскольку мы не знаем формат даты / времени части данных строки, мы не можем использовать d/M/yyyy или M/d/yyyy для анализа текста как даты.

Поскольку даты могут будь 31/12/1986 или 3/24/1986, опять же, не зная формата, тогда мы не можем полагаться на год, находящийся в фиксированной позиции.

На данный момент очевидным выбором является Regex. Попробуйте это:

var raw = "6/1/1986 24:00,ak,us,light,180,51.88,-176.6580556";
var regex = new Regex(@"\d{1,2}/\d{1,2}/(\d{4})");
var match = regex.Match(raw);
int year = int.Parse(match.Groups[1].Value);

Это дает 1986 как в int.

1 голос
/ 19 апреля 2020

Решение состоит в том, чтобы разделить строку с помощью " " вместо ",", чтобы получить часть даты, и проанализировать первый элемент в формате "d / M / yyyy" или "M / d / yyy" в зависимости от того, что вы хочу.

var data = "6/1/1986 24:00,ak,us,light,180,51.88,-176.6580556";
var dateString = data.Split(" ")[0];
var date = DateTime.ParseExact(dateString, "d/M/yyyy", System.Globalization.CultureInfo.InvariantCulture);
var year = date.Year;
...