C#通过两个日期作为字符串写入时间

C#通过两个日期作为字符串写入时间,c#,datetime,C#,Datetime,我有一个转换的开始和开始日期时间,该转换记录在此事件的开始和结束处。然后,我生成一个报告,其中列出了有关事件的一系列信息,包括其运行时。我有一列表示总经过时间(以天为单位),还有一个表示开始和停止的日期。一切都是以天为单位的,我不在乎小时/分/秒 如果开始时间为2010年9月29日,结束时间为2010年9月31日,我想打印: 9/29-31/2010 9/29-10/2/2010 12/29/2010-1/2/2011 如果开始时间为2010年9月29日,结束时间为2010年10月2日,我

我有一个转换的开始和开始日期时间,该转换记录在此事件的开始和结束处。然后,我生成一个报告,其中列出了有关事件的一系列信息,包括其运行时。我有一列表示总经过时间(以天为单位),还有一个表示开始和停止的日期。一切都是以天为单位的,我不在乎小时/分/秒

如果开始时间为2010年9月29日,结束时间为2010年9月31日,我想打印:

9/29-31/2010
9/29-10/2/2010
12/29/2010-1/2/2011
如果开始时间为2010年9月29日,结束时间为2010年10月2日,我想打印:

9/29-31/2010
9/29-10/2/2010
12/29/2010-1/2/2011
如果开始时间为2010年12月29日,结束时间为2011年1月2日,我想打印:

9/29-31/2010
9/29-10/2/2010
12/29/2010-1/2/2011

我知道我可以使用datetime的ToString(“M/d/yyyy”)方法来打印每个日期,但我希望有一种简单的方法可以以类似的格式打印两个日期。

我想你只需要对其进行编码,它只有两条if语句。。。年不一样,月不一样,否则

差不多

if (d1.year == d2.year)
{
  if (d1.month == d2.month)
     print format 1
  else
     print format 2
}
else
  print format 3

我想你只需要编码它,它只是2个if语句。。。年不一样,月不一样,否则

差不多

if (d1.year == d2.year)
{
  if (d1.month == d2.month)
     print format 1
  else
     print format 2
}
else
  print format 3

你的规则很容易翻译成代码,不需要花哨

static string GetDateRangeString(DateTime startDate, DateTime endDate)
{
    if (endDate.Year != startDate.Year)
    {
        return startDate.ToString("M/d/yyyy") + "-" + endDate.ToString("M/d/yyyy");
    }
    else if (endDate.Month != startDate.Month)
    {
        return startDate.ToString("M/d") + "-" + endDate.ToString("M/d/yyyy");
    }
    else
    {
        return startDate.ToString("M/d") + "-" + endDate.ToString("d/yyyy");
    }
}
演示:

Console.WriteLine(GetDateRangeString(new DateTime(2010, 9, 29), new DateTime(2010, 9, 30)));
Console.WriteLine(GetDateRangeString(new DateTime(2010, 9, 29), new DateTime(2010, 10, 30)));
Console.WriteLine(GetDateRangeString(new DateTime(2010, 9, 29), new DateTime(2011, 1, 30)));

你的规则很容易翻译成代码,不需要花哨

static string GetDateRangeString(DateTime startDate, DateTime endDate)
{
    if (endDate.Year != startDate.Year)
    {
        return startDate.ToString("M/d/yyyy") + "-" + endDate.ToString("M/d/yyyy");
    }
    else if (endDate.Month != startDate.Month)
    {
        return startDate.ToString("M/d") + "-" + endDate.ToString("M/d/yyyy");
    }
    else
    {
        return startDate.ToString("M/d") + "-" + endDate.ToString("d/yyyy");
    }
}
演示:

Console.WriteLine(GetDateRangeString(new DateTime(2010, 9, 29), new DateTime(2010, 9, 30)));
Console.WriteLine(GetDateRangeString(new DateTime(2010, 9, 29), new DateTime(2010, 10, 30)));
Console.WriteLine(GetDateRangeString(new DateTime(2010, 9, 29), new DateTime(2011, 1, 30)));
//前提条件:dt1
//前提条件:dt1
如果它们实际上是同一日期,您没有指定如何打印。假设在这种情况下,只打印一个日期

static string DateRangeToString(DateTime left, DateTime right) { 
  if ( left.Year != right.Year ) {
    return String.Format("{0}-{1}", left.ToString("M/d/yyyy"), right.ToString("M/d/yyyy"));
  } else if ( left.Month != right.Month ) { 
    return String.Format("{0}-{1}", left.ToString("M/d"), right.ToString("M/d/yyyy"));
  } else if ( left.Day != right.Day ) { 
    return String.Format("{0}-{1}", left.ToString("M/d"), right.ToString("d/yyyy"));
  } else {
    return left.ToString("M/d/yyyy");
  }
}

如果它们实际上是同一日期,您没有指定如何打印。假设在这种情况下,只打印一个日期

static string DateRangeToString(DateTime left, DateTime right) { 
  if ( left.Year != right.Year ) {
    return String.Format("{0}-{1}", left.ToString("M/d/yyyy"), right.ToString("M/d/yyyy"));
  } else if ( left.Month != right.Month ) { 
    return String.Format("{0}-{1}", left.ToString("M/d"), right.ToString("M/d/yyyy"));
  } else if ( left.Day != right.Day ) { 
    return String.Format("{0}-{1}", left.ToString("M/d"), right.ToString("d/yyyy"));
  } else {
    return left.ToString("M/d/yyyy");
  }
}

正是我所想的。您可以根据日期逻辑选择格式字符串并在return语句中进行格式设置,从而稍微简化它。此解决方案忽略了
startDate
endDate
是同一天的情况。谢谢。我完全不知道DateTime有年份和月份属性。我以为这必须在正则表达式中完成。我希望我用VS代替记事本和csc.exe,但由于某些原因,我的电脑不够酷。@Shawn,谷歌Visual Studio Express,并下载该软件的免费版本。它们不像常规版本那样功能齐全,但它们允许您使用IDE并编译甚至分发。他们一点也不坏,正是我所想的。您可以根据日期逻辑选择格式字符串并在return语句中进行格式设置,从而稍微简化它。此解决方案忽略了
startDate
endDate
是同一天的情况。谢谢。我完全不知道DateTime有年份和月份属性。我以为这必须在正则表达式中完成。我希望我用VS代替记事本和csc.exe,但由于某些原因,我的电脑不够酷。@Shawn,谷歌Visual Studio Express,并下载该软件的免费版本。它们不像常规版本那样功能齐全,但它们允许您使用IDE并编译甚至分发。他们一点也不坏。