سؤال
لدي بعض السلاسل بتنسيق xxh:yym حيث xx تمثل ساعات وyy تمثل دقائق مثل "05h:30m".ما هي الطريقة الأنيقة لتحويل سلسلة من هذا النوع إلى TimeSpan؟
المحلول
يبدو أن هذا يعمل، على الرغم من أنه مخترق بعض الشيء:
TimeSpan span;
if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
MessageBox.Show(span.ToString());
نصائح أخرى
DateTime.ParseExact
أو DateTime.TryParseExact
يتيح لك تحديد التنسيق الدقيق للإدخال.بعد حصولك على DateTime
, ، يمكنك الاستيلاء على DateTime.TimeOfDay
وهو أ TimeSpan
.
في غياب TimeSpan.TryParseExact
, أعتقد أن الحل "الأنيق" خارج هذا المزيج.
@buyutec كما توقعت، لن تعمل هذه الطريقة إذا كانت الفترات الزمنية تزيد عن 24 ساعة.
إليك احتمال واحد:
TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
وإذا كنت تريد أن تجعله أكثر أناقة في التعليمات البرمجية الخاصة بك، فاستخدم طريقة الامتداد:
public static TimeSpan ToTimeSpan(this string s)
{
TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
return t;
}
ثم يمكنك أن تفعل
"05h:30m".ToTimeSpan();
من موضوع آخر:
نكون TimeSpan.Parse و TimeSpan.TryParse لا الخيارات؟إذا كنت لا تستخدم تنسيقًا "معتمدًا"، فستحتاج إلى إجراء التحليل يدويًا.من المحتمل أن أقوم بالتقاط القيمتين الصحيحتين في تعبير عادي، ثم أحاول تحليلهما إلى أعداد صحيحة، ومن هناك يمكنك إنشاء TimeSpan جديد باستخدام مُنشئه.