Как я вижу, у вас дата в виде строки, но ваше значение времени может быть нулевым. Поэтому я бы предложил разделить ваш анализ в 2 этапа: дата и время. Другое дело, что я бы возвратил его как объект datetime, поэтому я могу использовать его так, как я хочу вместо использования ParseExact. Таким образом, если ваше время пустое или имеет проблему, вы все равно будете анализировать дату.
Вы также можете, конечно, если дата не разбирается, добавляя условие и возвращая дату по умолчанию вместо, через исключение или что-то еще else.
Просто базовый c пример, что-то вроде этого:
public DateTime ParseDateAndTime(string dateValue, int? timeValue)
{
var time = $"{(timeValue ?? 0) / 100}:{(timeValue ?? 0) % 100}";
var isTimeParsed = TimeSpan.TryParse(time, out var timeParsed);
DateTime.TryParse(dateValue, out var dateParsed);
if (isTimeParsed)
{
dateParsed = dateParsed.Add(timeParsed);
}
return dateParsed;
}
В случае, если вам нужно вызвать исключение, вы делаете что-то вроде:
var isDateParsed = DateTime.TryParse(dateValue, out var dateParsed);
if (!isDateParsed)
{
throw new Exception("date is not parsable");
}
Если вам нужно представить флаг, я бы предложил создать собственный объект и расширить описанный выше метод, например:
public MyDateTimeObject ParseDateAndTime(string dateValue, int? timeValue)
{
var result = new MyDateTimeObject();
var time = $"{(timeValue ?? 0) / 100}:{(timeValue ?? 0) % 100}";
var isTimeParsed = TimeSpan.TryParse(time, out var timeParsed);
var isDateParsed = DateTime.TryParse(dateValue, out var dateParsed);
if (!isDateParsed)
{
result.ParsingIssue = true;
return result;
//Or
//throw new Exception("date is not parsable");
}
if (isTimeParsed)
{
result.ParsedDatetime = dateParsed.Add(timeParsed);
}
return result;
}
И ваш класс
public class MyDateTimeObject
{
public DateTime ParsedDatetime { get; set; }
public bool ParsingIssue { get; set; }
}