我想模拟随机时间戳数据。 一年100条记录,为期一年。
我怎么能这样做? 当我设置:2013.01.01D00:00:00.000000000 100?一 随机数据不会在一天内停留。
感谢您的输入
答案 0 :(得分:2)
我不确定,这是否可以轻松完成。但是,您可以通过下一种方式为2013年的每一天生成100个随机时间戳
daysInYear: 365;
year: 2013.01.01D00:00:00.000000000;
//array of 365 elements, where every element represents corresponding date of year
dates: year + 01D * til daysInYear;
//array of 365 elements, where every element is an array of 100 random timestamps [0 .. 1D)
randomNanos: cut[100; (100 * daysInYear)?1D];
//array of 365 elements, where each element is an array of 100 random dateTimes for given day
result: dates + randomNanos;
//put all the dates in single array
raze result
执行相同操作的简短版本如下:
raze (2013.01.01D+01D * til 365) + cut[100; (100*365)?1D]
答案 1 :(得分:0)
为了模拟一天的数据,可以生成随机时间(浮点数小于1),并将它们添加到您希望为其生成数据的那一天。在这种情况下:
D:2016.03.01;
D+100?1f
将于2016.03.01返回100次随机时间。如果要在一个时间范围内生成数据,可以将浮点数的大小限制为小于1或大于某个最小值。
答案 2 :(得分:0)
如果你想处理闰年...除了在年初添加最大天数并询问是否是第31天之外,不确定当时有更好的方法。加上366,它可以是第31或第1。如果它是第31个好的,否则从最后的日期掉落。
/e.g.
q)last 2015.01.01+til 365
2015.12.31
q)last 2016.01.01+til 365
2016.12.30 /we are a day short
q)
/return the dates and the number of days based on whether its a leap year
q)dd:$[31i~`dd$last d:2016.01.01+til 366;(366;d);(365;-1_d)]
q)/returns (366;2016.01.01 2016.01.02...)
q)/the actual logic below is pretty much the same as the other answer
q)raze{[n;dy;dt] dt+n cut(n*dy)?.z.N}[100;].dd
2016.01.01D16:06:53.957527121 2016.01.01D10:55:10.892935198 2016.01.01D15:36:..