我有一个C++函数
string LocalDate()
{
time_t current = time(NULL);
struct tm *local_time = localtime(¤t);
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/