Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何使用javascript从UUIDV1(TimeUUID)提取时间戳?_Node.js_Cassandra_Uuid_Helenus - Fatal编程技术网

Node.js 如何使用javascript从UUIDV1(TimeUUID)提取时间戳?

Node.js 如何使用javascript从UUIDV1(TimeUUID)提取时间戳?,node.js,cassandra,uuid,helenus,Node.js,Cassandra,Uuid,Helenus,我使用Cassandra DB和Helenus模块对nodejs进行操作。我有一些包含TimeUUID列的行。如何在javascript中从TimeUUID获取时间戳?您可以使用CQL3中的unixTimestampOf或dateOf函数,也可以自己完成,方法很难: 时间被编码到UUID的前64位,但它与其他部分交织在一起,因此提取时间不是非常直接的 如果n是TimeUUID的整数表示,则可以按如下方式提取UNIX历元: n = (value >> 64) t = 0 t |= (n

我使用Cassandra DB和Helenus模块对nodejs进行操作。我有一些包含TimeUUID列的行。如何在javascript中从TimeUUID获取时间戳?

您可以使用CQL3中的
unixTimestampOf
dateOf
函数,也可以自己完成,方法很难:

时间被编码到UUID的前64位,但它与其他部分交织在一起,因此提取时间不是非常直接的

如果
n
TimeUUID
的整数表示,则可以按如下方式提取UNIX历元:

n = (value >> 64)
t = 0
t |= (n & 0x0000000000000fff) << 48
t |= (n & 0x00000000ffff0000) << 16
t |= (n & 0xffffffff00000000) >> 32
t -= 122192928000000000
seconds = t/10_000_000
microseconds = (t - seconds * 10_000_000)/10.0
n=(值>>64)
t=0
t |=(n&0x0000000000000fff)32
t-=12219292800000000
秒=t/10_000_000
微秒=(t-秒*10_000_000)/10.0
这段代码来自我的Ruby CQL3驱动程序cql rb,可以在这里找到完整的代码:


我使用了这个资源:,RFC实现了这个代码。

nodejs的节点uuid模块包含将uuid v1转换为时间戳的方法

这个库()非常简单和快速!!仅使用本机字符串函数。 也许这个Javascript API可以帮助您将UUID转换为日期格式, Javascript是一种简单的语言,这个简单的代码有助于为每种语言编写API

此API将UUID v1从1970-01-01转换为sec



所有您需要的:

例子:
使用
uuid时间
模块


我在这里询问了uuid模块的维护人员,他们向我指出了uuid时间模块

我想你可以直接从中获取时间戳。不幸的是,在这种情况下我不能。我在CF中有这样的结构:timestamp_u[user_key]:{timeUUID:'JSON_DATA',timeUUID:'JSON_DATA'…}。因此,row.forEach(函数(名称、值、ts、ttl)中的ts var包含timestamp_u[user_key]行的创建日期的时间戳。因此,对于convert TimeUUID(例如aa009299-0c22-47c0-9cd4-aa518f0274a7)要使用JS进行时间戳,我需要首先将uuid转换为整数表示形式…对吗?如何实现?您没有对其发出拉取请求?我是否对已添加的功能发出拉取请求?不,我没有添加?该方法的名称是什么?
v1time()
您是否在回答中单击了链接?是的,但该方法只添加到您的fork中,不是吗?这就是为什么我问您是否提出了拉取请求。据我所知,节点uuid包中没有时间。谢谢。对于这个特定的uuid,我得到了
“13.11.2014,18:36:06”
尽管如此。请注意,uuid必须是版本1;使用函数get_uuid_version(uuid_str){var uuid_arr=uuid_str.split('-')var timeHiAndVersion=parseInt(uuid_arr[2],16);var version=(timeHiAndVersion>>12)&0xF;返回版本;}
    get_time_int = function (uuid_str) {
        var uuid_arr = uuid_str.split( '-' ),
            time_str = [
                uuid_arr[ 2 ].substring( 1 ),
                uuid_arr[ 1 ],
                uuid_arr[ 0 ]
            ].join( '' );
        return parseInt( time_str, 16 );
    };

    get_date_obj = function (uuid_str) {
        var int_time = this.get_time_int( uuid_str ) - 122192928000000000,
            int_millisec = Math.floor( int_time / 10000 );
        return new Date( int_millisec );
    };
    var date_obj = get_date_obj(  '8bf1aeb8-6b5b-11e4-95c0-001dba68c1f2' );
    date_obj.toLocaleString( );// '11/13/2014, 9:06:06 PM'