เวลาเป็นมิลลิวินาทีนับตั้งแต่ยุคในเทอร์มินัล


40

ฉันจะได้รับเวลาตั้งแต่กาลเป็นมิลลิวินาทีใน terminal OSX ได้อย่างไร

Linux / Ubuntu ที่เทียบเท่าคือdate +%s.%N:

Linux $ date +%s.%N
1403377762.035521859

ซึ่งไม่ทำงานใน terminal OSX ของฉัน:

OSX $ date +%s.%N
1403377800.N

คำตอบ:


47

dateโปรแกรมใน OS X เป็นที่แตกต่างกว่า coreutils GNU ของdateโปรแกรม คุณสามารถติดตั้ง coreutils (รวมถึง gnu-date) จากนั้นคุณจะมีเวอร์ชันdateที่รองรับมิลลิวินาที

การติดตั้งจากแหล่งที่สามารถรบกวนสำหรับผู้ใช้ OS X พื้นเมืองของผมแนะนำให้คุณใช้Homebrew

ในการติดตั้งเครื่องมือเหล่านี้โดยใช้Homebrew ให้รัน oneliner นี้ในเทอร์มินัลของคุณ:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

ขณะนี้ Homebrew ได้รับการติดตั้งแล้ว (ควรทำตามคำแนะนำของผู้ติดตั้งหลังการติดตั้ง) ตอนนี้เราจะติดตั้ง coreutils brewใช้

brew install coreutils

ตามการติดตั้งบอกว่าคำสั่งทั้งหมดได้รับการติดตั้งด้วยคำนำหน้า 'g' (เช่น gdate, gcat, gln, etc ฯลฯ ) หากคุณต้องการใช้คำสั่งเหล่านี้พร้อมชื่อปกติคุณสามารถเพิ่มไดเรกทอรี "gnubin" ลงใน PATH ( ~/.bash_profile) ของคุณเช่น:

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

ตอนนี้คุณสามารถเรียกใช้

gdate +%s.%N

และสิ่งนี้จะเอาท์พุทเวลาของคุณตั้งแต่ยุคในมิลลิวินาที


3
ดี ผมไม่ได้มีการเพิ่มเส้นทางที่ถูกติดตั้งในgdate /usr/local/bin/gdate
Adam Matan

นั่นคือสิ่งที่คุณคาดหวัง ไบนารีทั้งหมดถูกติดตั้งด้วยคำนำหน้า g ในเส้นทางฉันให้ gnu-coreutils เดียวกันทั้งหมดโดยไม่มีคำนำหน้า g ดังนั้นหากคุณเพิ่มในเส้นทางของคุณเช่น PATH = "/ usr / local / opt / coreutils / libexec / gnubin: $ PATH" มันจะเข้ามาแทนที่ต้นฉบับ ดังนั้น OS X dateจะกลายเป็น GNU date(แทน gdate)
CousinCocaine

ไม่เป็นไร
CousinCocaine

3
ในทางเทคนิค+%s.%Nรูปแบบให้วินาทีลงไปที่ความแม่นยำระดับนาโนวินาทีไม่ใช่มิลลิวินาที หลังจากที่ฉันใช้ Brew เพื่อติดตั้งgdateฉันตรวจสอบ manpage เพื่อดูว่ามีมิลลิวินาทีหรือไม่ มันไม่ใช่. นอกจากนี้ยังไม่ได้บอกว่า%Nสามารถระบุความแม่นยำได้ แต่ฉันลองต่อไป ฉันพบว่าคำสั่งที่จะได้รับวินาทีลงไปที่ความแม่นยำมิลลิวินาทีเท่านั้น (เช่นสามตำแหน่งทศนิยม) gdate +%s.%3Nเป็น
LS

9

ใน OS X เพียงแค่รันdate +%sในขณะที่ OS X ไม่รองรับความแม่นยำใด ๆ มากกว่านี้ในdateเอาต์พุตและความแม่นยำเกินที่ไม่สนับสนุนโดยการเป็นตัวแทนภายในจะถูกตัดทอนไปยังลบอนันต์

หากคุณต้องการเอาต์พุตเป็นมิลลิวินาทีคุณสามารถใช้คำสั่งต่อไปนี้แม้ว่าเอาต์พุตจะถูกแก้ไขโดยการผนวกศูนย์แทนการเพิ่มความแม่นยำเนื่องจากเหตุผลดังกล่าวข้างต้น ข้อมูลต่อไปนี้ส่งออกมิลลิวินาทีที่ถูกต้องบนระบบที่รองรับความแม่นยำที่จำเป็น

echo $(($(date +'%s * 1000 + %-N / 1000000')))

แหล่งที่มาสำหรับคำสั่งข้างต้น: Unix.SE - วิธีรับมิลลิวินาทีตั้งแต่ Unix ยุค

หากคุณต้องการคำสั่งที่ต่อท้ายจำนวนศูนย์ใน OS X คุณสามารถใช้:

date +%s000

OS X ไม่รองรับ%-Nดังนั้นจึงไม่ทำอะไรเลย (และอาจทำให้เกิดปัญหาได้หาก$Nตั้งค่าตัวแปรเชลล์) เพียงแค่ใช้date +%s000(หรือdate +%s.000ถ้าคุณต้องการจุดทศนิยม)
Gordon Davisson

@ กอร์ดอนใช่ฉันพูดถึงเรื่องนี้ แต่ถ้า OP กำลังมองหาโซลูชันแบบพกพาที่ทำงานได้สำเร็จบนระบบที่มีความแม่นยำนั้นคำสั่งดังกล่าวจะทำงาน แน่นอนคุณสามารถผนวกค่าศูนย์ไปยังเอาต์พุต แต่การคัดลอกไปยังระบบอื่นซึ่งอาจรองรับความแม่นยำพิเศษนั้นไม่เหมาะ
grg

อ่าฉันเข้าใจแล้ว แต่เนื่องจากdateคำสั่งของ OS X เพิ่ง%-Nผ่านเป็นNมันสามารถรบกวนการคำนวณ ลองตั้งค่าN=7000000000000000000จากนั้นลองใช้คำสั่ง ... นี่เป็นกรณีที่ไม่น่าเป็นไปได้ในทางปฏิบัติ แต่ฉันรู้สึกปลอดภัยกับบางสิ่งที่ไม่ได้ขึ้นอยู่กับสภาพแวดล้อม
Gordon Davisson

@Gordon จริง ๆ แล้วการตั้งค่าตัวแปรจะทำให้เสีย - ฉันคิดว่าตัวแปรเฉพาะสามารถรีเซ็ตก่อนที่คำสั่งจะทำงาน แต่การรีเซ็ตตัวแปรแบบนั้นเป็นสิ่งที่สคริปต์ที่ดีควรทำก่อนที่จะเรียกใช้คำสั่งอย่างไรก็ตามในกรณีนี้ แน่นอนว่าทั้งหมดนี้เป็นไปตามข้อสันนิษฐานของฉันที่ว่า OP ต้องการสคริปต์นั่นคือคำตอบที่แก้ไขเพื่อรวมค่าต่อท้ายตามตัวอักษร
grg

2
OP ขอ "เวลาตั้งแต่ยุคเป็นมิลลิวินาที" นี่คือคำตอบเกี่ยวกับวิธีการเพิ่มศูนย์ของสตริง ไม่เหมือนกัน. แม้ว่าจะอธิบายไว้ในโพสต์ไม่ใช่คำตอบสำหรับคำถาม
CousinCocaine

6

วิธีนี้ใช้ได้กับ macOS

หากคุณพิจารณาใช้สคริปต์ทุบตีและมีไพ ธ อนอยู่คุณสามารถใช้รหัสนี้ได้:

#!/bin/bash

python -c 'from time import time; print int(round(time() * 1000))'

หรือเขียนpythonสคริปต์โดยตรง:

#!/usr/bin/python

from time import time
print int(round(time() * 1000)) 

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.