查找最小日期/使用量和最大日期/使用量

本文关键字:使用量 日期 查找 | 更新日期: 2023-09-27 18:04:45

我需要一些帮助。我有一个XML账单,它有多个相同的节点。现在我正在循环遍历节点并相应地合并值。我向您展示的代码只是我需要帮助的部分。这个循环包含了很多我合并值的地方。我需要帮助的是选择最小和最大日期/用法。因为我现在返回多个节点而不是一个,所以我将循环并合并数据。

  1. 所以在它循环通过节点后,我需要将UsageMeterReadStartDate设置为最早的最小日期。数据类型字符串
  2. 与UsageMeterReadStartUsage相同。数据类型字符串
  3. 所以在它循环通过节点后,我需要UsageMeterReadStartDate设置为最新的最大日期。数据类型字符串
  4. 与UsageMeterReadEndUsage相同

这就是我所坚持的。我已经完成了合并所有我需要的其他数据。我今年18岁,是一名相当新的程序员。我只是迷失在自己的逻辑里了。任何指导都会对我有所帮助。我相信最后两个IF语句是我需要帮助的地方,也是逻辑要去的地方。

查找最小日期/使用量和最大日期/使用量

我认为你应该先循环遍历所有条目。将它们转换为DateTime对象。DateTime对象允许您比较其他对象的大于或小于。我认为,你会被年份转换所困扰因为你没有在源中跟踪它。

if (meterReadStartXMLNodes.Count > 0 && meterReadStartXMLNodes[0].HasChildNodes)
{   // This is to fill up the meter read start date and meter read start usage as an attribute of the "sadetails" node in the newer XML. 
    DateTime oldDateTime = DateTime.Now;
    string oldUsage = "";
    foreach (var node in meterReadStartXMLNodes)
    {
        DateTime tempDateTime = DateTime.Parse(String.Format("{0} {1}", meterReadStartXMLNodes[0].SelectSingleNode("IRBILGU_US_USG_STRT_DT_MM.USAGE").InnerText,
                                                                        meterReadStartXMLNodes[0].SelectSingleNode("IRBILGU_US_USG_STRT_DT_DD.USAGE").InnerText));
        if (tempDateTime < oldDateTime)
        {
            // Any time you've determined you have an older date, we capture the usage for that date
            oldDateTime = tempDateTime;
            oldUsage = meterReadStartXMLNodes[0].SelectSingleNode("IRBILGU_US_KWH_PRV_MTR_READ.USAGE").InnerText;
        }
    }
    // By the time you get here, you've already determined the lowest date/time, format it.
    saBillDetail.UsageMeterReadStartDate = oldDateTime.ToString("MMM dd");
    saBillDetail.UsageMeterReadStartUsage = oldUsage;
}

对于结束日期,你可以做同样的事情,除了不需要给它分配一个值,它将默认为0001年。

if (meterReadEndXMLNodes.Count > 0 && meterReadEndXMLNodes[0].HasChildNodes)
{   // This is to fill up the meter read end date and meter read end usage as an attribute of the "sadetails" node in the newer XML.
    DateTime latestDateTime = new DateTime();
    string latestUsage = "";
    foreach (var node in meterReadStartXMLNodes)
    {
        DateTime tempDateTime = DateTime.Parse(String.Format("{0} {1}", meterReadStartXMLNodes[0].SelectSingleNode("IRBILGU_US_USG_END_DT_MM.USAGE").InnerText,
                                                                        meterReadStartXMLNodes[0].SelectSingleNode("IRBILGU_US_USG_END_DT_DD.USAGE").InnerText));
        if (tempDateTime > latestDateTime)
        {
            // Any time you've determined you have an newer date, we capture the usage for that date
            latestDateTime = tempDateTime;
            latestUsage = meterReadStartXMLNodes[0].SelectSingleNode("IRBILGU_US_KWH_MTR_READ.USAGE").InnerText;
        }
    }
    saBillDetail.UsageMeterReadEndDate = latestDateTime.ToString("MMM dd");
    saBillDetail.UsageMeterReadEndUsage = latestUsage;
}

当然,我没有测试这个东西,但它应该让你开始,你可以修复错误。既然你是编程新手,你能理解我所做的吗?