gpt4 book ai didi

c# - 获取日期范围内的扣除结果

转载 作者:太空宇宙 更新时间:2023-11-03 15:18:24 24 4
gpt4 key购买 nike

我每天记录数据使用情况,并希望显示某个日期范围内的总数据使用情况。

数据在每月 10 日重置,因此数据使用示例如下:

Number: 001xxxxxxxx 
Date - Data
8th - 100mb
9th - 120mb
10th - 10mb
11th - 40mb

因此,要获得第 8 天和第 11 天之间的总数据使用量,不可能将第 11 天的数据减去第 8 天(40mb-100mb),因为它会在第 10 天重置。

我需要 40mb+(120mb-100mb) = 60mb 总用量

这是我将数据、日期和数字放入字典的方法

private void getNumberDatas(List<int> phoneNo, DateTime dateStart, DateTime dateEnd)
{
Dictionary<int, Dictionary<DateTime, float>> d_PhoneNo_DateDataList = new Dictionary<int, Dictionary<DateTime, float>>();
Dictionary<DateTime, float> d_DateTime_Data = new Dictionary<DateTime, float>();

string strConnectionString = ConfigurationManager.ConnectionStrings["xxx"].ConnectionString;
SqlConnection conn = new SqlConnection(strConnectionString);

string sqlcommand = "SELECT xxx FROM xxx WHERE PhoneNo=@PhoneNo AND date BETWEEN @Date1 AND @Date2";

for (int i = 0; i < phoneNo.Count; i++)
{
d_DateTime_Data.Clear();

using (SqlCommand cmd = new SqlCommand(sqlcommand, conn))
{
conn.Open();
cmd.Parameters.AddWithValue("@PhoneNo", phoneNo[i]);
cmd.Parameters.AddWithValue("@Date1", dateStart);
cmd.Parameters.AddWithValue("@Date2", dateEnd);
cmd.ExecuteNonQuery();
SqlDataReader reader = cmd.ExecuteReader();

while (reader.Read())
{
d_DateTime_Data.Add(DateTime.Parse(reader["Date"].ToString()), float.Parse(reader["Data"].ToString()));
}
conn.Close();
}
d_PhoneNo_DateDataList.Add(phoneNo[i], d_DateTime_Data);
}
}

所以要获取今天的数据将是:

Dictionary<DateTime, float> temp_Datetime_data = new Dictionary<DateTime, float>();

if (d_PhoneNo_DateDataList.TryGetValue("001xxxxxxxx", out temp_Datetime_data))
{
float dataToday;

if (temp_Datetime_data.TryGetValue(DateTime.Today, out dataToday))
{
Console.WriteLine(dataToday.ToString());
}
}

现在我的问题是,如果假设用户选择 2016 年 5 月 20 日至 2016 年 6 月 30 日,我不知道如何实现计算

让我知道是否太困惑了,我不知道最好的解释方式

最佳答案

它并不完美,但它将是满足您需求的良好基础:

private static int getData(Dictionary<DateTime, int> values, DateTime start, DateTime stop)
{
// Reduce the scope
var val = values.Where(x => x.Key >= start && x.Key <= stop);

// Create a list of ranges
List<Dictionary<DateTime, int>> listOfMonth = new List<Dictionary<DateTime, int>>
{
new Dictionary<DateTime, int>()
};
var currentMonth = listOfMonth.Last();
int previousValue = int.MinValue;
foreach (KeyValuePair<DateTime, int> keyValuePair in val)
{
// Reset the month
if (keyValuePair.Value < previousValue)
{
currentMonth = new Dictionary<DateTime, int>()
{
{DateTime.Now, 0} // Add placeholder
};
listOfMonth.Add(currentMonth);
}
previousValue = keyValuePair.Value;

currentMonth.Add(keyValuePair.Key, keyValuePair.Value);
}

return listOfMonth.Sum(dictionary => dictionary.Values.Max() - dictionary.Values.Min());
}

有了这些数据:

Dictionary<DateTime, int> dataDictionary = new Dictionary<DateTime, int>()
{
{new DateTime(2016, 8, 4), 20},
{new DateTime(2016, 8, 5), 50},
{new DateTime(2016, 8, 6), 70},
{new DateTime(2016, 8, 7), 90},
{new DateTime(2016, 8, 8), 100},
{new DateTime(2016, 8, 9), 120},
{new DateTime(2016, 8, 10), 10},
{new DateTime(2016, 8, 11), 40},
};

DateTime start = new DateTime(2016, 8, 7);
DateTime stop = new DateTime(2016, 8, 11);

我得到 70 (120-90) + (40 - 0)

关于c# - 获取日期范围内的扣除结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38116058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com