Формат карты YY.MM дата и время MM.YYYY дата и время - PullRequest
0 голосов
/ 09 апреля 2019

В базе данных у меня есть строка, представляющая дату и время в формате YY.MM (YY, что означает Год и MM, равное Месяц . Например 21.03 = 2021.03)

Как я могу сопоставить этот специальный format(yy.mm) с этим format(mm/yyyy) с помощью аннотации данных или другим способом?

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Попробуйте Parse дату и затем отформатируйте обратно до string:

  using System.Globalization;

  ...

  string source = "21.03";

  // 03.2021
  string result = DateTime
    .ParseExact(source, "yy'.'MM", CultureInfo.InvariantCulture)
    .ToString("MM'.'yyyy");

Однако у нас есть неоднозначность здесь: "03.50" может быть либо "March 1950", либо "March 2050". Политика по умолчанию: 00..29 - 2000..2029 и 30..99 - 1930..1999. Если вы хотите изменить эту политику, вы можете создать и использовать собственную culture :

  CultureInfo myCulture = CultureInfo.InvariantCulture.Clone() as CultureInfo;

  // Everything to 20.., never 19..
  myCulture.Calendar.TwoDigitYearMax = 2099;

  string source = "99.03";
  // 03.2099
  string result = DateTime.ParseExact(source, "yy'.'MM", myCulture).ToString("MM'.'yyyy");

Или даже

  CultureInfo myCulture = CultureInfo.CurrentCulture.Clone() as CultureInfo;

  // Everything to 20.., never 19..
  myCulture.Calendar.TwoDigitYearMax = 2099;

  // Current culture as usual, except 2 digit year policy
  CultureInfo.CurrentCulture = myCulture;

  ...

  string source = "99.03";
  // 03.2099
  string result = DateTime.ParseExact(source, "yy'.'MM", null).ToString("MM'.'yyyy");
0 голосов
/ 09 апреля 2019

Вы можете сделать это, используя функцию разделения строк:

string dateIn = "11.10";
string month = dateIn.Split('.')[1]; //split the String at the point and save it
string year = dateIn.Split('.')[0];
string dateOut = $"{month}/20{year}";   //build a new string         

//this will fix the 1900/2000 issue more or less as all dates in the furutre would be send back to the past  you can adapt this to your need:
if( DateTime.Now.Year < Convert.ToInt32($"20{year}"))
{
    dateOut = $"{month}/19{year}";
}
//dateOut is "10/2011"
...