如何在.Net中获取给定日期的前三个日期。

5
我希望获取从当前日期开始的3个日期,或者如果用户输入类似于16/07/2011这样的日期,则我想显示此日期的前3个日期,例如15/07/2011, 14/07/2011, 13/07/2011
2个回答

8

简单的步骤:

  • 将日期解析为 DateTime 类型。如果您知道要使用的格式,建议使用 DateTime.ParseExactDateTime.TryParseExact
  • 使用 DateTime.AddDays(-1) 来获取前一天的日期(可以是与原来不同的值,也可以始终从“新”日期减去一天)。

例如:

string text = "16/07/2011";

Culture culture = ...; // The appropriate culture to use. Depends on situation.
DateTime parsed;
if (DateTime.TryParseExact(text, "dd/MM/yyyy", culture, DateTimeStyles.None,
                            out parsed))
{
    for (int i = 1; i <= 3; i++)
    {
         Console.WriteLine(parsed.AddDays(-i).ToString("dd/MM/yyyy"));
    }
}
else    
{
    // Handle bad input
}

你能按照正常情况提供那个文化吗? - Vivekh
1
@Vivekh:什么是“正常”?如果这是直接用户输入,那么用户的文化可能是适当的 - 但是也可能适合采用他们的正常日期格式,例如“MM/dd/yyyy”。 - Jon Skeet
请注意,如果输入的值不仅包括日期,还指定了时间,则首先应使用.Date属性。根据您的用途,您可能想这样做,以确保安全。 - Merlyn Morgan-Graham
@Merlyn:考虑到我们只是在之后打印日期,并且只减去了一些天数,我认为这不会有任何影响。还要注意,我们正在使用仅接受日期的格式显式解析输入。 - Jon Skeet

0

只需使用 TimeSpan 对象或 AddDays 函数。以下是示例扩展方法,您可以轻松修改天数:

    public static DateTime SubtractDays(this DateTime time, int days)
    {
        return time - new TimeSpan(days, 0, 0, 0);
    }

    public static DateTime SubtractDays(this DateTime time, int days)
    {
        return time.AddDays(days)
    }

我已经撤回了之前的评论,因为我认为由于DateTime的工作方式,这样做应该是可以的,但一般来说,你应该注意减去“一天”和减去“24小时”的区别 - 它们并不总是相同的,因为并非所有天都有24小时(夏令时转换)。 - Jon Skeet
第一种和第二种实现不匹配。您应该在第二个示例中否定天数,否则您必须传递负面天数才能使其正常工作,但我希望实际上是添加天数。 - Merlyn Morgan-Graham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接