UNITY改变数据库导出时间的时间间隔
用C#将数据库中时间列改变分布间隔并导入Unity的UGUI下拉列表
在数据库中是以五秒为间隔写入的,应甲方要求需要对数据库数据进行十分钟一整合,并导出为Excel表格,对时间的选择就不知道怎么写合适
下面,是我按我的笨方法来的。
代码展示
Start_Time.ClearOptions();//清空下拉列表选项
End_Time.ClearOptions();
sql = "SELECT ID,Format$(System_Time, 'yyyy / mm / dd hh:mm:ss') AS S_Time FROM t_First";//数据库查询
DataTable Access_Data = AccessData.getInstance().OperateAccess(sql, "t_First");
//Debug.Log(Access_Data.Rows[0][Access_Data.Columns[1].ColumnName]);
List<DateTime> dateTime = new List<DateTime>();//定义储存时间的列表
List<string> Start_dateTime_Name = new List<string>();//定义起始时间选项列表
List<string> End_dateTime_Name = new List<string>();//定义终止时间选项列表
DateTimeFormatInfo dtFormat = new System.Globalization.DateTimeFormatInfo();//强制界面时间格式
dtFormat.ShortDatePattern = "yyyy/MM/dd hh:mm:ss";//定义时间格式为"yyyy/MM/dd hh:mm:ss"
for (int i = 0; i < Access_Data.Rows.Count; i++)
{
//将数据库中的时间按格式转换为DateTime类型
dateTime.Add(Convert.ToDateTime(Access_Data.Rows[i][Access_Data.Columns[1].ColumnName].ToString(), dtFormat));
}
for (int i = 0; i < dateTime.Count-1; )
{
//计算第一项与后一项的时间间隔,小于10Min则删除后一项,直到第一项与后一项相差大于等于十,并将那一项变为第二项,依次重复
TimeSpan span = dateTime[i+1].Subtract(dateTime[i]);
int Min_Diff = span.Minutes + 1;
//Debug.Log(Min_Diff);
if (Min_Diff<10)
{
dateTime.RemoveAt(i+1);
}
else
{
i++;
}
}
//加入数据库最后一条时间,以防止数据库最后一项与DateTime列表中最后一项相差小于十,导致的数据缺失
dateTime.Add(Convert.ToDateTime(Access_Data.Rows[Access_Data.Rows.Count-1][Access_Data.Columns[1].ColumnName].ToString(), dtFormat));
for (int i = 0; i < dateTime.Count ; i++)
{
//将DateTime列表转为字符串列表以方便传入下拉列表中,此处起始和终止时间的字符串列表相同
Start_dateTime_Name.Add(dateTime[i].ToString());
End_dateTime_Name.Add(dateTime[i].ToString());
}
//将起始时间字符串列表中最后一项删除、终止时间字符串列表中第一项删除
Start_dateTime_Name.RemoveAt(Start_dateTime_Name.Count-1);
End_dateTime_Name.RemoveAt(0);
//字符串列表传入下拉列表选项
Start_Time.AddOptions(Start_dateTime_Name);
End_Time.AddOptions(End_dateTime_Name);
必要的注释都写上了,就不过多解释了。
果然程序员最讨厌的两件事一个是看别人的代码不写注释,另一个是不想写注释啊!!
实现效果
这个是数据库中数据
这是UNITY下拉列表中的显示
结语
大概功能实现了,但我觉得应该有更好的办法吧,Sql我很基础,大家有更好的方式还望不吝赐教。