سؤال

لدي بعض السلاسل بتنسيق 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 جديد باستخدام مُنشئه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top