|
|
@@ -281,7 +281,7 @@ public class CustTicketInfo
|
|
|
/// <summary>
|
|
|
/// 退票记录
|
|
|
/// </summary>
|
|
|
- public RefundRecord? RefundRecord { get; set; }
|
|
|
+ public RefundRecord RefundRecord { get; set; } = new RefundRecord();
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -334,110 +334,32 @@ public class AdditionalService
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
/// <summary>
|
|
|
-/// 航班信息实体(通用)
|
|
|
+/// 航班信息
|
|
|
/// </summary>
|
|
|
public class FlightInfo
|
|
|
{
|
|
|
- /// <summary>
|
|
|
- /// 序号
|
|
|
- /// </summary>
|
|
|
- public int SequenceNo { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 航班号
|
|
|
- /// </summary>
|
|
|
- public string FlightNumber { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 舱位等级/舱位代码
|
|
|
- /// </summary>
|
|
|
- public string CabinClass { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 星期
|
|
|
- /// </summary>
|
|
|
- public string WeekDay { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 出发日期(原始格式)
|
|
|
- /// </summary>
|
|
|
- public string DepartureDateRaw { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 出发日期(标准格式 yyyy-MM-dd)
|
|
|
- /// </summary>
|
|
|
- public string DepartureDate { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 出发机场代码
|
|
|
- /// </summary>
|
|
|
- public string DepartureAirport { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 到达机场代码
|
|
|
- /// </summary>
|
|
|
- public string ArrivalAirport { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 出发时间(原始格式)
|
|
|
- /// </summary>
|
|
|
- public string DepartureTimeRaw { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 出发时间(格式化 HH:mm)
|
|
|
- /// </summary>
|
|
|
- public string DepartureTime { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 到达时间(原始格式)
|
|
|
- /// </summary>
|
|
|
- public string ArrivalTimeRaw { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 到达时间(格式化 HH:mm)
|
|
|
- /// </summary>
|
|
|
- public string ArrivalTime { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 是否次日到达
|
|
|
- /// </summary>
|
|
|
- public bool IsNextDayArrival { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 航站楼信息
|
|
|
- /// </summary>
|
|
|
- public string Terminal { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 机型
|
|
|
- /// </summary>
|
|
|
- public string AircraftType { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 飞行时长
|
|
|
- /// </summary>
|
|
|
- public string Duration { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 状态(HK/KK等)
|
|
|
- /// </summary>
|
|
|
- public string Status { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 原始文本
|
|
|
- /// </summary>
|
|
|
- public string RawText { get; set; }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 显示信息
|
|
|
- /// </summary>
|
|
|
- public string DisplayInfo => $"{SequenceNo}.{FlightNumber} {DepartureAirport}→{ArrivalAirport} {DepartureTime}→{ArrivalTime}{(IsNextDayArrival ? "+1" : "")}";
|
|
|
+ public int SequenceNo { get; set; } // 序号
|
|
|
+ public string FlightNumber { get; set; } // 航班号
|
|
|
+ public string CabinClass { get; set; } // 舱位等级
|
|
|
+ public string WeekDay { get; set; } // 星期(MO,TU,WE,TH,FR,SA,SU)
|
|
|
+ public string DepartureDateRaw { get; set; } // 原始日期字符串
|
|
|
+ public DateTime DepartureDate { get; set; } // 起飞日期
|
|
|
+ public string DepartureTimeRaw { get; set; } // 原始起飞时间
|
|
|
+ public string DepartureTime { get; set; } // 格式化起飞时间
|
|
|
+ public string ArrivalTimeRaw { get; set; } // 原始到达时间
|
|
|
+ public string ArrivalTime { get; set; } // 格式化到达时间
|
|
|
+ public string DepartureAirport { get; set; } // 起飞机场
|
|
|
+ public string ArrivalAirport { get; set; } // 到达机场
|
|
|
+ public bool IsNextDayArrival { get; set; } // 是否次日到达
|
|
|
+ public int NextDayCount { get; set; } // 跨天天数(+1表示第二天)
|
|
|
+ public string Terminal { get; set; } // 航站楼
|
|
|
+ public string AircraftType { get; set; } // 机型
|
|
|
+ public string Duration { get; set; } // 飞行时长
|
|
|
+ public string Status { get; set; } // 状态(HK1,KK1,TK1等)
|
|
|
+ public string RawText { get; set; } // 原始文本
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/// <summary>
|
|
|
/// 航班解析器
|
|
|
/// </summary>
|
|
|
@@ -476,7 +398,7 @@ public static class FlightParser
|
|
|
if (string.IsNullOrWhiteSpace(rawText))
|
|
|
return new List<FlightInfo>();
|
|
|
|
|
|
- var lines = rawText.Trim().Split(new[] { '\n', '\r' ,','}, StringSplitOptions.RemoveEmptyEntries);
|
|
|
+ var lines = rawText.Trim().Split(new[] { '\n', '\r' }, StringSplitOptions.RemoveEmptyEntries);
|
|
|
var result = new List<FlightInfo>();
|
|
|
|
|
|
foreach (var line in lines)
|
|
|
@@ -507,6 +429,7 @@ public static class FlightParser
|
|
|
}
|
|
|
|
|
|
// 格式2:1.CA431 TU27MAY TFUFRA 0135 0645 T1 1 359 11H10M
|
|
|
+ // 格式2变体:2. LH098 TU28MAY FRAMUC 0915 1010 1 2 321 00H55M
|
|
|
if (Regex.IsMatch(line, @"^\d+\.[A-Z0-9]+\s+[A-Z]{2}\d{2}[A-Z]{3}"))
|
|
|
{
|
|
|
return ParseFormat2(line, year);
|
|
|
@@ -517,11 +440,10 @@ public static class FlightParser
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
- #region 格式1解析(HU7086 C MO18MAY TFUHAK HK1 1605 1820 E T2T2)
|
|
|
+ #region 格式1解析
|
|
|
|
|
|
/// <summary>
|
|
|
/// 解析格式1
|
|
|
- /// 示例:1. HU7086 C MO18MAY TFUHAK HK1 1605 1820 E T2T2
|
|
|
/// </summary>
|
|
|
private static FlightInfo ParseFormat1(string line, int year)
|
|
|
{
|
|
|
@@ -532,23 +454,22 @@ public static class FlightParser
|
|
|
var sequenceNo = int.Parse(seqMatch.Groups[1].Value);
|
|
|
var content = line.Substring(seqMatch.Length).Trim();
|
|
|
|
|
|
- // 正则匹配:航班号 + 舱位 + 日期 + 机场 + 状态 + 时间 + 其他
|
|
|
+ // 正则匹配
|
|
|
var pattern = @"^([A-Z0-9]+)\s+([A-Z])\s+([A-Z]{2})(\d{2}[A-Z]{3})\s+([A-Z]{3})([A-Z]{3})\s+([A-Z]{2,3}\d?)\s+(\d{3,4})\s+(\d{3,4})(?:\+(\d+))?\s+([A-Z])\s+([A-Z0-9]+)";
|
|
|
var match = Regex.Match(content, pattern);
|
|
|
|
|
|
if (!match.Success) return null;
|
|
|
|
|
|
- var weekDay = match.Groups[3].Value; // MO
|
|
|
- var dateRaw = match.Groups[4].Value; // 18MAY
|
|
|
- var departureAirport = match.Groups[5].Value; // TFU
|
|
|
- var arrivalAirport = match.Groups[6].Value; // HAK
|
|
|
- var status = match.Groups[7].Value; // HK1
|
|
|
- var departureTime = match.Groups[8].Value; // 1605
|
|
|
- var arrivalTime = match.Groups[9].Value; // 1820
|
|
|
+ var weekDay = match.Groups[3].Value;
|
|
|
+ var dateRaw = match.Groups[4].Value;
|
|
|
+ var departureAirport = match.Groups[5].Value;
|
|
|
+ var arrivalAirport = match.Groups[6].Value;
|
|
|
+ var departureTime = match.Groups[8].Value;
|
|
|
+ var arrivalTime = match.Groups[9].Value;
|
|
|
var isNextDay = match.Groups[10].Success && match.Groups[10].Value == "1";
|
|
|
- var terminalFlag = match.Groups[12].Value; // T2T2
|
|
|
+ var terminalFlag = match.Groups[12].Value;
|
|
|
|
|
|
- var flight = new FlightInfo
|
|
|
+ return new FlightInfo
|
|
|
{
|
|
|
SequenceNo = sequenceNo,
|
|
|
FlightNumber = match.Groups[1].Value,
|
|
|
@@ -560,24 +481,18 @@ public static class FlightParser
|
|
|
DepartureTimeRaw = departureTime,
|
|
|
ArrivalTimeRaw = arrivalTime,
|
|
|
IsNextDayArrival = isNextDay,
|
|
|
- Status = status,
|
|
|
+ DepartureTime = FormatTime(departureTime),
|
|
|
+ ArrivalTime = FormatTime(arrivalTime),
|
|
|
+ DepartureDate = ParseDate(dateRaw, year),
|
|
|
+ Status = match.Groups[7].Value,
|
|
|
Terminal = terminalFlag,
|
|
|
RawText = line
|
|
|
};
|
|
|
-
|
|
|
- // 格式化时间
|
|
|
- flight.DepartureTime = FormatTime(departureTime);
|
|
|
- flight.ArrivalTime = FormatTime(arrivalTime);
|
|
|
-
|
|
|
- // 解析日期
|
|
|
- flight.DepartureDate = ParseDate(dateRaw, year);
|
|
|
-
|
|
|
- return flight;
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
- #region 格式2解析(1.CA431 TU27MAY TFUFRA 0135 0645 T1 1 359 11H10M)
|
|
|
+ #region 格式2解析(修复版)
|
|
|
|
|
|
/// <summary>
|
|
|
/// 解析格式2
|
|
|
@@ -585,49 +500,109 @@ public static class FlightParser
|
|
|
/// </summary>
|
|
|
private static FlightInfo ParseFormat2(string line, int year)
|
|
|
{
|
|
|
- // 提取序号和航班号
|
|
|
- var pattern = @"^(\d+)\.([A-Z0-9]+)\s+([A-Z]{2})(\d{2}[A-Z]{3})\s+([A-Z]{3})([A-Z]{3})\s+(\d{3,4})\s+(\d{3,4})(?:\+(\d+))?\s+([A-Z0-9]+)\s+(\d+)\s+([A-Z0-9]+)\s+([\dH]+)";
|
|
|
- var match = Regex.Match(line.Trim(), pattern);
|
|
|
+ // 1. 提取序号(支持 "1." 和 "1. ")
|
|
|
+ var seqMatch = Regex.Match(line, @"^(\d+)\.\s*");
|
|
|
+ if (!seqMatch.Success) return null;
|
|
|
|
|
|
- if (!match.Success) return null;
|
|
|
+ var sequenceNo = int.Parse(seqMatch.Groups[1].Value);
|
|
|
+ var content = line.Substring(seqMatch.Length).Trim();
|
|
|
+
|
|
|
+ // 2. 分割空格
|
|
|
+ var parts = content.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
|
|
|
+ if (parts.Length < 8) return null;
|
|
|
|
|
|
- var weekDay = match.Groups[3].Value; // TU
|
|
|
- var dateRaw = match.Groups[4].Value; // 27MAY
|
|
|
- var departureAirport = match.Groups[5].Value; // TFU
|
|
|
- var arrivalAirport = match.Groups[6].Value; // FRA
|
|
|
- var departureTime = match.Groups[7].Value; // 0135
|
|
|
- var arrivalTime = match.Groups[8].Value; // 0645
|
|
|
- var isNextDay = match.Groups[9].Success && match.Groups[9].Value == "1";
|
|
|
- var terminal = match.Groups[10].Value; // T1
|
|
|
- var stopCount = match.Groups[11].Value; // 1
|
|
|
- var aircraftType = match.Groups[12].Value; // 359
|
|
|
- var duration = match.Groups[13].Value; // 11H10M
|
|
|
-
|
|
|
- var flight = new FlightInfo
|
|
|
+ try
|
|
|
{
|
|
|
- SequenceNo = int.Parse(match.Groups[1].Value),
|
|
|
- FlightNumber = match.Groups[2].Value,
|
|
|
- WeekDay = weekDay,
|
|
|
- DepartureDateRaw = $"{weekDay}{dateRaw}",
|
|
|
- DepartureAirport = departureAirport,
|
|
|
- ArrivalAirport = arrivalAirport,
|
|
|
- DepartureTimeRaw = departureTime,
|
|
|
- ArrivalTimeRaw = arrivalTime,
|
|
|
- IsNextDayArrival = isNextDay,
|
|
|
- Terminal = terminal,
|
|
|
- AircraftType = aircraftType,
|
|
|
- Duration = duration,
|
|
|
- RawText = line
|
|
|
- };
|
|
|
+ var flight = new FlightInfo
|
|
|
+ {
|
|
|
+ SequenceNo = sequenceNo,
|
|
|
+ RawText = line
|
|
|
+ };
|
|
|
+
|
|
|
+ int idx = 0;
|
|
|
+
|
|
|
+ // 航班号
|
|
|
+ flight.FlightNumber = parts[idx++];
|
|
|
+
|
|
|
+ // 日期(如 TU27MAY)
|
|
|
+ var dateRaw = parts[idx++];
|
|
|
+ if (dateRaw.Length >= 7)
|
|
|
+ {
|
|
|
+ flight.WeekDay = dateRaw.Substring(0, 2);
|
|
|
+ flight.DepartureDateRaw = dateRaw;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 机场(如 TFUFRA 或分开的格式)
|
|
|
+ var airportStr = parts[idx++];
|
|
|
+ if (airportStr.Length >= 6)
|
|
|
+ {
|
|
|
+ // 连写格式:TFUFRA -> TFU + FRA
|
|
|
+ flight.DepartureAirport = airportStr.Substring(0, 3);
|
|
|
+ flight.ArrivalAirport = airportStr.Substring(3, 3);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // 分开格式
|
|
|
+ flight.DepartureAirport = airportStr;
|
|
|
+ flight.ArrivalAirport = parts[idx++];
|
|
|
+ }
|
|
|
|
|
|
- // 格式化时间
|
|
|
- flight.DepartureTime = FormatTime(departureTime);
|
|
|
- flight.ArrivalTime = FormatTime(arrivalTime);
|
|
|
+ // 起飞时间
|
|
|
+ flight.DepartureTimeRaw = parts[idx++];
|
|
|
+ flight.DepartureTime = FormatTime(flight.DepartureTimeRaw);
|
|
|
+
|
|
|
+ // 到达时间(可能带 +1)
|
|
|
+ var arrivalRaw = parts[idx++];
|
|
|
+ if (arrivalRaw.Contains('+'))
|
|
|
+ {
|
|
|
+ var arrParts = arrivalRaw.Split('+');
|
|
|
+ flight.ArrivalTimeRaw = arrParts[0];
|
|
|
+ flight.IsNextDayArrival = true;
|
|
|
+ if (arrParts.Length > 1 && int.TryParse(arrParts[1], out var days))
|
|
|
+ {
|
|
|
+ flight.NextDayCount = days;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ flight.ArrivalTimeRaw = arrivalRaw;
|
|
|
+ }
|
|
|
+ flight.ArrivalTime = FormatTime(flight.ArrivalTimeRaw);
|
|
|
+
|
|
|
+ // 航站楼(可选,以T开头)
|
|
|
+ if (idx < parts.Length && parts[idx].StartsWith("T"))
|
|
|
+ {
|
|
|
+ flight.Terminal = parts[idx++];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 序号(可选)
|
|
|
+ if (idx < parts.Length && int.TryParse(parts[idx], out _))
|
|
|
+ {
|
|
|
+ // 这个序号可能是经停次数或行程序号
|
|
|
+ idx++;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 机型(可选,数字或数字+字母)
|
|
|
+ if (idx < parts.Length && Regex.IsMatch(parts[idx], @"^\d{2,3}[A-Z]?$"))
|
|
|
+ {
|
|
|
+ flight.AircraftType = parts[idx++];
|
|
|
+ }
|
|
|
+
|
|
|
+ // 飞行时长(可选,包含H)
|
|
|
+ if (idx < parts.Length && parts[idx].Contains('H'))
|
|
|
+ {
|
|
|
+ flight.Duration = parts[idx++];
|
|
|
+ }
|
|
|
|
|
|
- // 解析日期
|
|
|
- flight.DepartureDate = ParseDate(dateRaw, year);
|
|
|
+ // 解析日期
|
|
|
+ flight.DepartureDate = ParseDate(dateRaw, year);
|
|
|
|
|
|
- return flight;
|
|
|
+ return flight;
|
|
|
+ }
|
|
|
+ catch
|
|
|
+ {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
#endregion
|
|
|
@@ -642,37 +617,43 @@ public static class FlightParser
|
|
|
if (string.IsNullOrWhiteSpace(time))
|
|
|
return string.Empty;
|
|
|
|
|
|
+ // 移除 +1 等后缀
|
|
|
+ var cleanTime = time.Split('+')[0];
|
|
|
+
|
|
|
// 4位数字
|
|
|
- if (time.Length == 4 && int.TryParse(time, out _))
|
|
|
+ if (cleanTime.Length == 4 && int.TryParse(cleanTime, out _))
|
|
|
{
|
|
|
- return $"{time.Substring(0, 2)}:{time.Substring(2, 2)}";
|
|
|
+ return $"{cleanTime.Substring(0, 2)}:{cleanTime.Substring(2, 2)}";
|
|
|
}
|
|
|
|
|
|
// 3位数字(905 -> 09:05)
|
|
|
- if (time.Length == 3 && int.TryParse(time, out _))
|
|
|
+ if (cleanTime.Length == 3 && int.TryParse(cleanTime, out _))
|
|
|
{
|
|
|
- return $"0{time.Substring(0, 1)}:{time.Substring(1, 2)}";
|
|
|
+ return $"0{cleanTime.Substring(0, 1)}:{cleanTime.Substring(1, 2)}";
|
|
|
}
|
|
|
|
|
|
// 已经是 HH:mm 格式
|
|
|
- if (Regex.IsMatch(time, @"^\d{1,2}:\d{2}$"))
|
|
|
+ if (Regex.IsMatch(cleanTime, @"^\d{1,2}:\d{2}$"))
|
|
|
{
|
|
|
- var parts = time.Split(':');
|
|
|
+ var parts = cleanTime.Split(':');
|
|
|
return $"{parts[0].PadLeft(2, '0')}:{parts[1]}";
|
|
|
}
|
|
|
|
|
|
- return time;
|
|
|
+ return cleanTime;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
/// 解析日期(27MAY -> 2024-05-27)
|
|
|
/// </summary>
|
|
|
- private static string ParseDate(string dateStr, int year)
|
|
|
+ private static DateTime ParseDate(string dateStr, int year)
|
|
|
{
|
|
|
if (string.IsNullOrWhiteSpace(dateStr))
|
|
|
- return string.Empty;
|
|
|
+ return DateTime.MinValue;
|
|
|
|
|
|
- var match = Regex.Match(dateStr, @"(\d{2})([A-Z]{3})");
|
|
|
+ // 移除星期前缀
|
|
|
+ var cleanDate = Regex.Replace(dateStr, @"^[A-Z]{2}", "");
|
|
|
+
|
|
|
+ var match = Regex.Match(cleanDate, @"(\d{2})([A-Z]{3})");
|
|
|
if (match.Success)
|
|
|
{
|
|
|
var day = int.Parse(match.Groups[1].Value);
|
|
|
@@ -682,17 +663,73 @@ public static class FlightParser
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- var date = new DateTime(year, month, day);
|
|
|
- return date.ToString("yyyy-MM-dd");
|
|
|
+ return new DateTime(year, month, day);
|
|
|
}
|
|
|
catch
|
|
|
{
|
|
|
- return dateStr;
|
|
|
+ return DateTime.MinValue;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- return dateStr;
|
|
|
+ return DateTime.MinValue;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取完整起飞时间(含时分)
|
|
|
+ /// </summary>
|
|
|
+ public static DateTime GetFullDepartureTime(FlightInfo flight, int year)
|
|
|
+ {
|
|
|
+ if (flight.DepartureDate == DateTime.MinValue || string.IsNullOrEmpty(flight.DepartureTimeRaw))
|
|
|
+ return DateTime.MinValue;
|
|
|
+
|
|
|
+ var time = ParseTimeToTimeSpan(flight.DepartureTimeRaw);
|
|
|
+ return flight.DepartureDate.Add(time);
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 获取完整到达时间(含时分和跨天)
|
|
|
+ /// </summary>
|
|
|
+ public static DateTime GetFullArrivalTime(FlightInfo flight, int year)
|
|
|
+ {
|
|
|
+ if (flight.DepartureDate == DateTime.MinValue || string.IsNullOrEmpty(flight.ArrivalTimeRaw))
|
|
|
+ return DateTime.MinValue;
|
|
|
+
|
|
|
+ var time = ParseTimeToTimeSpan(flight.ArrivalTimeRaw);
|
|
|
+ var arrivalDate = flight.DepartureDate.Add(time);
|
|
|
+
|
|
|
+ if (flight.IsNextDayArrival)
|
|
|
+ {
|
|
|
+ arrivalDate = arrivalDate.AddDays(flight.NextDayCount > 0 ? flight.NextDayCount : 1);
|
|
|
+ }
|
|
|
+
|
|
|
+ return arrivalDate;
|
|
|
+ }
|
|
|
+
|
|
|
+ /// <summary>
|
|
|
+ /// 解析时间字符串为 TimeSpan
|
|
|
+ /// </summary>
|
|
|
+ private static TimeSpan ParseTimeToTimeSpan(string time)
|
|
|
+ {
|
|
|
+ var cleanTime = time.Split('+')[0];
|
|
|
+
|
|
|
+ if (cleanTime.Length == 4)
|
|
|
+ {
|
|
|
+ return new TimeSpan(
|
|
|
+ int.Parse(cleanTime.Substring(0, 2)),
|
|
|
+ int.Parse(cleanTime.Substring(2, 2)),
|
|
|
+ 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (cleanTime.Length == 3)
|
|
|
+ {
|
|
|
+ return new TimeSpan(
|
|
|
+ int.Parse(cleanTime.Substring(0, 1)),
|
|
|
+ int.Parse(cleanTime.Substring(1, 2)),
|
|
|
+ 0);
|
|
|
+ }
|
|
|
+
|
|
|
+ return TimeSpan.Zero;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|