У меня есть функция C ++, например

string LocalDate()
{
  time_t current = time(NULL);
  struct tm *local_time = localtime(&current);
  char TIME[0xFF] ;
  sprintf(TIME, "%02d%02d%02d%02d%02d%02d", local_time->tm_year % 100, local_time->tm_mon + 1,
  local_time->tm_mday, local_time->tm_hour, local_time->tm_min, local_time->tm_sec);
  return string(TIME);
}

Который я переписал на C # вот так

public static string LocalDate()
{
    DateTime value = DateTime.Now;
    return String.Format("{0}{1}{2}{3}{4}{5}", value.Year.ToString("00"),
                                               value.Month.ToString("00"), value.Day.ToString("00"),
                                               value.Hour.ToString("00"), value.Minute.ToString("00"), value.Second.ToString("00"));
}

Единственное отличие - C # возвращает 20151029155030. В то время как C ++ возвращает 151029155030. (Часть года в C ++ на самом деле имеет значение 115 - я имею в виду структуру)

Вы можете видеть, что C ++ пропускает 20 часть года. Мой первый вопрос: не кажется ли вам C ++ странным? Как он правильно посчитает годы, скажем, в 2212 году? (Не будет ли она такая же как 2112? И тд)

Как сделать так, чтобы вывод C # был таким же, как% 100?

1
user5462062 29 Окт 2015 в 14:57

2 ответа

Лучший ответ

Вы можете просто использовать настраиваемый формат даты и времени вместо

return DateTime.Now.ToString("yyMMddHHmmss");

Проблема с вашей реализацией заключается в том, что value.Year.ToString("00") не ограничивает строку двумя цифрами. Это только гарантирует, что string будет иметь как минимум 2 цифры и левую панель с нулями, если их меньше. Чтобы воспроизвести C ++, вы могли бы вместо этого сделать value.Year % 100.

2
juharr 29 Окт 2015 в 12:01

(Часть года в C ++ на самом деле имеет значение 115 - я имею в виду структуру)

Вы можете видеть, что C ++ пропускает 20 часть года. Мой первый вопрос: не кажется ли вам C ++ странным? Как он правильно посчитает годы, скажем, в 2212 году? (Не будет ли она такая же как 2112? И тд.

DateTime имеет в качестве значения года количество лет после 0. https://msdn.microsoft.com/en-us/library/system.datetime.year%28v=vs.110%29.aspx

0
3dz9j56 29 Окт 2015 в 12:06