【问题标题】:Dynamically Building Date from String Parse从字符串解析动态构建日期
【发布时间】:2016-01-19 23:19:49
【问题描述】:

我有一个字符串存储在我们的数据库中,其中包含用于我们视图的某些查询的预定数据。

例如数据库中的字符串示例是

userid=3,name=stuart 等

目前在某些特殊情况下使用占位符,以允许我在运行时(无需用户输入)动态设置一些数据,例如

userid={UID}

所以当从数据库中读取它时,我只需对字符串进行替换以插入数据;

string.Replace("{UID}", User.ID);

有效地允许我限制视图并预先确定返回给它们的数据。我现在的任务是为日期添加更动态的方法。

我们还有其他日期字段,例如 StartDate 和 EndDate,到目前为止,它们只是硬编码日期来限制显示的数据;

例如StartDate=2015/10/21,EndDate=2015/11/21(即yyyy/MM/dd)

这些需要变得更加灵活,例如我可以显示当前月份数据、季度数据、年度数据等。

我的想法是坚持使用相同的占位符类型并添加类似的内容;

StartDate={-Days(10)} - 在 DateTime.Now 之前 10 天的 StartDate

StartDate={-Months(3)} - 例如DateTime.Now 之前的 3 个月

StartDate={-Years(1)} - 例如从 DateTime.Now 减去一年

StartDate={+Days(10)} - 例如从 DateTime.Now 开始的 10 天后

然后我会使用 EndDate 执行类似的过程。

EndDate={-Months(10)} - 例如从 DateTime.Now 等减去 10 个月

这将使我能够灵活地构建足够接近任何日期限制的内容。理想情况下,也可以将这些约束链接起来;

StartDate={-Days(10)-Months(1)-Years(2)}

获取这些数据然后执行此操作的最佳方法是什么。

【问题讨论】:

    标签: c# datetime replace text-parsing


    【解决方案1】:

    大概您只需要您建议的三个偏移量(可以是正数或负数的日、月和年),然后您可以使用 DateTime 的 AddDays/Months/Years 方法来获取您需要的日期并相应地对其进行格式化您的查询。

    例如从你的字符串中解析出这些之后:

    String formattedDate =  DateTime.Date.AddDays(days).AddMonths(months).AddYears(years).ToString("<database specific date format!>");
    

    此示例使用 .Date 而不是 .Now,因此没有时间元素。

    就存储这些偏移量而言,您可以使用与您建议的格式类似的格式,例如:

    StartDate=1,-2, 4
    

    作为你的三个偏移量。

    话虽如此,我怀疑您最好在数据库中创建一个表,其中包含所有这些过滤器选项的特定字段,而不是解析字符串来获取它们。换句话说,在此示例中,您将拥有三个字段用于日、月和年偏移量。这样做的好处是您可以在 SQL 中执行所有操作,并且您将获得更高效和优化的查询。当然,您可能无法更改此设计,只能继续使用它,但我建议您测试当前的性能和数据库负载方法,因为您将来可能会遇到问题。

    【讨论】:

    • 我对获取日期的 c# 方法很满意,它更像是解析过程,我想尝试提高效率,但不知道如何处理。我很欣赏使用多个字段可能会更好,不幸的是它是一个现有的数据库,我被我所拥有的东西所困扰。此外还有多个过滤器,所以我不能真正使用这种方法。
    • 添加了一些关于存储偏移量的信息,你可以解析那种信息吗?
    • 我认为这听起来不错,所以我可以简单地将 StartDate={0,0,-20} 设置为过去 20 天,等等。这样就可以了。最后一个问题只是解析数据?为了保持通用性,我希望不必亲自寻找 StatDate、EndDate 等。即只要它使用这种结构,任何领域都可以使用它吗?有什么想法吗?
    • 当然,所以在这种情况下,您现有的代码可能会为您完成一些工作,因为它已经提供了 field={value},您现在只需将 {value} 部分更改为具有多个值.您可以使用简单的 String.Split 来获取值,然后验证您是否正好有三个。然后,您可以使用它来确定您是否正在过滤日期,或者如果您有单个值,则假设您正在执行标准过滤器。虽然你可以再次看到为什么对这种事情使用字符串解析会变得讨厌!
    • 如果您坚持使用这种方法,那么您还希望在看到格式不正确的过滤器字符串时验证和/或抛出异常。我真的建议你建议改变这种方法,即使它只是为了这些新的偏移量。
    猜你喜欢
    • 1970-01-01
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 2013-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多