将日期函数从C++重写为C#

Rewrite date function from C++ to C#

本文关键字:重写 C++ 日期 函数      更新时间:2023-10-16

我有一个类似的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++返回CCD_ 2(C++中的年份部分实际值为115——我的意思是结构)

您可以看到C++省略了年份的20部分。我的第一个问题是,C++部分对你来说不是很奇怪吗?它将如何正确计算2212年的年份?(它不是和2112一样吗?等等)

如何使C#输出相同的值做%100?

您可以使用自定义日期时间格式而不是

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

实现的问题在于value.Year.ToString("00")没有将字符串限制为两位数。这只会确保string将至少有2个数字,并且如果数字较少,则用零填充左焊盘。要复制C++,您可以改为使用value.Year % 100

(C++中的年份部分实际值为115——我指的是结构)

您可以看到C++省略了年份的20部分。我的第一个问题是,C++部分对你来说不是很奇怪吗?它将如何正确计算2212年的年份?(它不是和2112一样吗?等

DateTime具有自0以来的年份值。https://msdn.microsoft.com/en-us/library/system.datetime.year%28v=vs.110%29.aspx