Saya ingin mengonversi daftar tanggal yang direpresentasikan sebagai berikut:

  • 6 Juni
  • September 18
  • 2 November
  • 29 Februari

Tanggal itu sendiri tidak menentukan tahun jadi ketika saya mencoba menguraikannya menggunakan Convert.ToDateTime(), diasumsikan tahun berjalan (2021). Bagaimana saya bisa menentukan tanggal ini menjadi tahun yang berbeda? Katakanlah saya ingin menentukan masing-masing tanggal ini berasal dari tahun 2020. Bagaimana saya bisa menentukannya dalam konversi? Apakah ini tempat saya akan menggunakan CultureInfo?

2
webworm 8 Januari 2021, 00:16

3 jawaban

Jawaban Terbaik

Anda dapat mengurai (ParseExact) text yang disediakan; satu-satunya masalah yang mungkin adalah tahun kabisat dan 29 Februari:

private static DateTime MyConvert(string text, int year = 0) {
  return DateTime.ParseExact(
    $"{(year <= 0 ? DateTime.Today.Year : year)} {text}", 
    "yyyy MMMM d", 
    CultureInfo.InvariantCulture);
}

Demo:

  string[] tests = new string[] {
    "June 6",
    "September 18",
    "November 2",
    "February 29"
  };

  string report = string.Join(Environment.NewLine, tests
    .Select(test => $"{test,-15} => {MyConvert(test, 2000):dd.MM.yyyy}"));

  Console.Write(report);

Hasil:

June 6          => 06.06.2000
September 18    => 18.09.2000
November 2      => 02.11.2000
February 29     => 29.02.2000
2
Dmitry Bychenko 7 Januari 2021, 21:48

Satu baris dapat melakukannya:

string textDate = "September 18";
int desiredYear = 2008;

DateTime date = Convert.ToDateTime(desiredYear.ToString() + textDate);
1
Gustav 7 Januari 2021, 21:34

Ganti saja tahun post hoc.

var input = "June 6";
var converted = DateTime.ParseExact("mmmm d");
var date = new DateTime(DateTime.Today.Year, converted.Month, converted.Day);
0
John Wu 7 Januari 2021, 22:02