0

我有一个类似于 41512 的 MSDate,我想从那个日期算起 2 年前。现在我在 C# 中,41512 日期是一个字符串。

4

2 回答 2

5

msDate 是自 1900-01-00 以来的天数,因此您可以通过取new DateTime(1900,01,01)并添加 msDate 来计算它,然后取 2(1 代表 00-00 而不是 00-01,而 1 因为你没有计算目标日期本身)。更简单的是,FromOADate 函数会为您处理这个问题。然后,您可以减去两年以获得新日期。您可以选择使用 ToOADate 函数将此日期转换回整数。

int msDate = 41512;
//DateTime d = (new DateTime(1900, 01, 01)).AddDays(msDate - 2).AddYears(-2);
DateTime d = DateTime.FromOADate(msDate).AddYears(-2);
msDate = int.Parse(d.ToOADate().ToString());
于 2013-08-29T23:27:26.620 回答
0

您的“MSDate”是自特定纪元以来的天数(纪元是日历上的零点)?如果是这样,您可以执行以下操作:

public DateTime MsDateToDateTime( string msDate )
{
  int daysSinceEpoch ;
  bool parsed = int.TryParse( msDate , out daySinceEpoch ) ;
  if ( !parsed ) throw new ArgumentException("msDate") ;

  Datetime value = epoch.AddDays( daysSinceEpoch ) ;
  return value ;
}

// our epoch is 1 January 1900 00:00:00
private static readonly DateTime epoch = new DateTime(1900,1,1) ;

一旦它是 a DateTime,你可以随心所欲地操纵它。您可能会阅读该DateTime.AddYears()方法。

走另一条路:

public string DateTimeToMsDate( DateTime dt )
{
   return ((int) (dt-epoch).TotalDays ).ToString() ;
}
于 2013-08-29T23:22:19.147 回答