タイムスタンプを62進数にするワンライナー

  • 投稿日:
  • by
  • カテゴリ:

タイムスタンプをファイル名やら何かのIDやらに使ったりするけど、重複が怖いのでナノ秒まで取ると長すぎて使えないとか、色々有りますよねー。でも、タイムスタンプにしとくと、時系列に並べるのが楽とかあるよねー。

 

年〜ナノ秒まで並べると、24桁。

これをエポック秒+ナノ秒にすると現在19桁。

 

[自然数をX進数の文字列に変換するJavaScript](http://recitativo-fant.asia/blog/2013/01/xjavascript.html)

[Linuxコマンドからパイプでnode.jsに渡して処理するワンライナー](http://recitativo-fant.asia/blog/2013/02/linuxnodejs.html)

dateコマンド(エポック秒+ナノ秒) date +"%s%N" でタイムスタンプ取得、これらを組み合わせて、・・・

 

とかやってみるけど、JavaScriptの桁数の関係上、現在時刻でマイクロ秒(16桁)くらいまでしか計算できてない(=逆算もできない)ので(逆算しないなら使えなくもないけどw)、「cutコマンドで16桁だけ取り出す」をカマして、下記としてみた。

 

date +"%s%N" | cut -b 1-16 | node -e "var d2x=function(d){var s='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';var l=s.length;var x='';while(d>0){x=s.charAt(d%l)+x;d=Math.floor(d/l);}return x;};process.stdin.resume();process.stdin.on('data',function(str){console.log(d2x(str));});"

 

これで、「1359705351694061」(エポック秒+マイクロ秒の16桁)を「6e6ngkaIt」(9桁)にできた。\(^ω^)ノ ヤッホイ

 

ちなみに、逆算する場合はこちら。

 

echo "6e6ngkaIt" | node -e "var x2d=function(x){x=''+x;x=x.trim();var i,j,k=0,s='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',l=x.length;for(i=0;i<=l;i++){for(j=0;j<s.length;j++){if(s.charAt(j)==x.charAt(i)){k+=j*Math.pow(s.length,l-i-1);}}}return k;};process.stdin.resume();process.stdin.on('data',function(str){console.log(x2d(str));});"