我有一个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?

最佳答案

您可以只使用Custom DateTime format

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

您的实现的问题是value.Year.ToString("00")不会将字符串限制为两位数。这只能确保string至少包含2位数字,如果少于则保留左填充为零。要复制C++,可以改成value.Year % 100

关于c# - 将日期函数从C++重写为C#,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33413593/

10-13 07:10