Pertanyaan Uraikan string ke TimeSpan


Saya memiliki beberapa string xxh: format yym di mana xx adalah jam dan yy adalah menit seperti "05h: 30m". Apa cara yang elegan untuk mengonversi string jenis ini ke TimeSpan?


29
2017-08-25 20:16


asal


Jawaban:


Ini tampaknya berfungsi, meskipun sedikit bersifat peretasan:

TimeSpan span;


if (TimeSpan.TryParse("05h:30m".Replace("m","").Replace("h",""), out span))
            MessageBox.Show(span.ToString());

27
2017-08-25 20:20



DateTime.ParseExact atau DateTime.TryParseExact memungkinkan Anda menentukan format input yang tepat. Setelah Anda mendapatkan DateTime, Anda bisa ambil DateTime.TimeOfDay yang mana TimeSpan.

Dengan tidak adanya TimeSpan.TryParseExactSaya pikir solusi 'elegan' tidak ada.

@buyutec Seperti yang Anda duga, metode ini tidak akan berfungsi jika rentang waktu memiliki lebih dari 24 jam.


6
2017-08-25 20:23



Inilah satu kemungkinan:

TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));

Dan jika Anda ingin membuatnya lebih elegan dalam kode Anda, gunakan metode ekstensi:

public static TimeSpan ToTimeSpan(this string s)
{
  TimeSpan t = TimeSpan.Parse(s.Remove(2, 1).Remove(5, 1));
  return t;
}

Maka Anda bisa melakukannya

"05h:30m".ToTimeSpan();

2
2017-08-25 20:24



Dari utas lain:

Cara mengonversi xs: durasi ke rentang waktu


2
2018-06-04 20:36



Adalah TimeSpan.Parse dan TimeSpan.TryParse bukan pilihan? Jika Anda tidak menggunakan format "disetujui", Anda harus melakukan parsing secara manual. Saya mungkin akan menangkap dua nilai integer Anda dalam ekspresi reguler, dan kemudian mencoba mem-parsing mereka menjadi bilangan bulat, dari sana Anda dapat membuat TimeSpan baru dengan konstruktornya.


1
2017-08-25 20:22