如何在kdb中模拟一年的日期

如何在kdb中模拟一年的日期,kdb,Kdb,我想模拟随机时间戳数据。 一年内每天有100条记录 我怎么能做到呢? 当我设置a:2013.01.01D00:00:00.000000000时 100?a 随机数据不会停留在一天之内 感谢您的投入我不确定这是否容易做到。但是,您可以通过下一种方式为2013年的每一天生成100个随机时间戳 daysInYear: 365; year: 2013.01.01D00:00:00.000000000; //array of 365 elements, where every element repres

我想模拟随机时间戳数据。 一年内每天有100条记录

我怎么能做到呢? 当我设置a:2013.01.01D00:00:00.000000000时 100?a 随机数据不会停留在一天之内


感谢您的投入

我不确定这是否容易做到。但是,您可以通过下一种方式为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]

为了模拟一天的数据,可以生成随机时间(因为浮动小于一)并将其添加到要生成数据的日期。在这种情况下:

D:2016.03.01;
D+100?1f

将在2016.03.01返回100个随机时间。如果要在某个时间范围内生成数据,可以将浮点大小限制为小于1或大于某个最小值。

如果要处理闰年。。。除了在年初加上最长天数并询问是否是第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:..