คุณช่วยบอกเวลาฉันได้ไหม [ปิด]


55

คุณรู้ว่า API นาฬิกา / เวลาของภาษาของคุณเสียและไม่น่าเชื่อถือเลย

ดังนั้นคุณจะไม่ได้รับอนุญาตให้ใช้ API ในตัวเพื่อเข้าถึงเวลา / วันที่ของระบบ

แต่คุณก็รู้ด้วยว่าความสามารถทางภาษาของคุณในการทำคณิตศาสตร์วันที่และการรักษาค่าวันที่ / เวลาในตัวแปรนั้นถูกต้อง

เขียนโปรแกรมที่พิมพ์วันที่ / เวลาปัจจุบันโดยไม่ต้องเรียก API วันที่ / เวลา / นาฬิกาใด ๆ ตัวอย่างเช่นDateTime.Now, GetDate()และฟังก์ชั่นที่คล้ายกันจะไม่ได้รับอนุญาต

คำตอบที่มีผู้โหวตมากที่สุดเป็นผู้ชนะ

ในกรณีที่เสมอกันคำตอบที่มีความแม่นยำมากกว่าจะชนะ (นั่นคือแม่นยำมากถึงวินาทีจากนั้นมิลลิวินาทีจากนั้นไมโครวินาทีและอื่น ๆ )


2
พูดอีกอย่างคือพูดคุยกับเซิร์ฟเวอร์เวลาหรือไม่?
Peter Taylor

3
ใช่คุณสามารถทำได้ ทางออกหนึ่งที่เป็นไปได้
microbian

3
ค่อนข้างคำถามที่ไม่เจาะจง print(input("Please enter the current time"))ผมคิดว่าการโหวตมากที่สุดจะได้รับการรวบรวมโดยคำตอบเช่น
Howard

7
เงินของฉันอยู่ที่ "โหลด REPL สำหรับภาษาอื่นและเรียก API เวลาที่ไม่เสีย"
Jonathan Van Matre

2
@ ซึ่งไม่อนุญาตเช่นกัน เพราะคำตอบของคุณจะไม่น่าเชื่อถือ
microbian

คำตอบ:


121

ชวา

โซลูชันเกือบทั้งหมดในปัจจุบันสันนิษฐานว่าคอมพิวเตอร์ในพื้นที่ / ระยะไกลไม่ได้โกหกเกี่ยวกับเวลาปัจจุบัน (คุณเชื่อว่า T-600 เช่นกัน?)
จุดสำคัญในการคำนวณเวลาไว้วางใจธรรมชาติอันบริสุทธิ์
แอพ Android นี้ขอให้ผู้ใช้ถ่ายภาพท้องฟ้าและคาดการณ์เวลาปัจจุบันด้วยความแม่นยำที่โดดเด่น:

public void onActivityResult(int requestCode, int resultCode, Intent data) 
{
   if (resultCode == RESULT_OK) 
   {
      Uri selectedImageUri = data.getData();
      this.imageView.setImageURI(selectedImageUri);

      TimeGuesser guesser = new TimeGuesser(this);
      String result = guesser.guessTimeFromImage(selectedImageUri);
      this.textView.setText(result);   
   }
}

public class TimeGuesser {

    private Context context;
    public TimeGuesser(Context context)
    {
        super();
        this.context = context;
    }

    public String guessTimeFromImage(Uri uri) {
        Bitmap bitmap = null;
        try {
            bitmap = MediaStore.Images.Media.getBitmap(this.context.getContentResolver(), uri);
        } catch (IOException e) {
            return "There is no sky. Everyone's going to die";
        }

        float brightness = getBrightness(bitmap);

        if (brightness < 90.0)
        {
            return "It's sooo late";
        } else {
            return "It's sooo early";
        }
    }

    private float getBrightness(Bitmap bitmap)
    {
        float R, G, B;
        R = G = B = 0.0f;
        int pixelColor;
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        int size = width * height;

        for (int x = 0; x < width; ++x) {
            for (int y = 0; y < height; ++y) {
                pixelColor = bitmap.getPixel(x, y);
                R += Color.red(pixelColor);
                G += Color.green(pixelColor);
                B += Color.blue(pixelColor);
            }
        }

        R /= size;
        G /= size;
        B /= size;

        float brightness =  (0.2126f*R ) + (0.7152f*G) + (0.0722f*B);
        return brightness;
    }
}

ผล:

ป้อนคำอธิบายรูปภาพที่นี่


ป้อนคำอธิบายรูปภาพที่นี่


49
+1 สำหรับ"There is no sky. Everyone's going to die": D
Doorknob

6
"ทุกคนกำลังจะตาย - หรือนิ้วของคุณอยู่เหนือกล้อง
corsiKa

โปรดระบุ Java
user1886419

3
นี่เป็นที่ชื่นชอบแน่นอนฉันหวังว่ามันจะไม่ลงมาที่ tiebreaker ...
Dryden Long

21
สิ่งที่เกี่ยวกับสุริยุปราคา? พวกเขามีแนวโน้มที่จะก่อให้เกิดปัญหามากที่นี่ในระหว่างการพัฒนา Java!
ลา

64

ทับทิม

ขอบอกตรงๆว่า: เวลาจะเปลี่ยนเฉพาะเมื่อมีบางสิ่งถูกโพสต์บนstackoverflow.com ;)

สคริปต์จะแยกเวลาของป้ายกำกับ "XYs ago" ในคำถามระดับสูงสุด

require 'net/http'
source = Net::HTTP.get('stackoverflow.com', '/')

puts source.match(/span title=\"(.*)\" class=\"relativetime/)[1]

เอาท์พุท:

2014-03-10 18:40:05Z

2
แม่นยำเพียงวินาทีที่สอง ... และอันดับที่สองนั้นส่งผลการนมัสการที่น่าประทับใจ
David Wilkins

3
ส่วน <center> ไม่สามารถถือเขามา
Doorknob

@Doorknob ฉันต้องพิมพ์โพสต์นั้นและแขวนไว้บนผนังของฉัน
wchargin

30

ทุบตี

แบบนี้? (ต้องการwgetและgrep)

wget -qO- 'http://www.wolframalpha.com/input/?i=current+time'|grep ' am \| pm '

ผลลัพธ์ที่ฉันได้รับไม่กี่นาทีที่ผ่านมา:

                    Why am I seeing this message? 
  context.jsonArray.popups.pod_0200.push( {"stringified": "6:08:38 pm GMT\/BST  |  Monday, March 10, 2014","mInput": "","mOutput": "", "popLinks": {} });

หรือสิ่งนี้ (ต้องการwgetและeog)

wget http://c.xkcd.com/redirect/comic/now
eog ./now
rm ./now

ผลลัพธ์ที่ฉันได้รับตอนนี้: (ภาพโดยxkcd )

แผนที่โลกพร้อมเขตเวลา http://c.xkcd.com/redirect/comic/now


@tbodt ไม่แน่ใจว่าคุณจะเห็นความคิดเห็นนี้หรือไม่ การแก้ไขของคุณไม่ถูกต้องเนื่องจากhttp://c.xkcd.com/redirect/comic/nowให้ภาพในขณะที่http://xkcd.com/nowให้หน้าเว็บ
ace_HongKong การพึ่งพากัน

9
ฉันเพิ่งรู้ว่าการ์ตูนแสดงการเปลี่ยนแปลงขึ้นอยู่กับช่วงเวลาของวัน ที่น่ากลัว.
RJFalconer

2
น่าเสียดายที่การ์ตูนไม่ได้รวมการปรับเวลาตามฤดูกาลไว้ด้วย (ตัวอย่างเช่นสหรัฐฯตะวันออกอยู่หลังอังกฤษเพียงสี่ชั่วโมงขณะที่ฉันเขียนสิ่งนี้ไม่ใช่ปกติห้าอย่างที่การ์ตูนแสดง) ยิ่งมีความสำคัญซีกโลกเหนือและซีกโลกใต้ก็สามารถขยับออกจากซิงค์ได้สองชั่วโมง
David Richerby

16
ฉันพูด +1 กับ xkcd เพราะไม่ได้สังเกตการปรับเวลาตามฤดูกาลและหวังว่าส่วนที่เหลือของโลกจะเหมาะ
hoosierEE

29

ดวลจุดโทษ / coreutils

touch . && stat . -c %z

แสดงวันที่ในรูปแบบที่ค่อนข้างไม่เป็นมาตรฐาน:
YYYY-MM-DD hh:mm:ss.nanoseconds +timezone
แม้ว่าฉันเดาว่ามันอาจขึ้นอยู่กับสถานที่


1
ใช้งานไม่ได้ มันบอกว่าได้รับอนุญาตปฏิเสธ :)
devnull

5
@devnull ระบบไฟล์ของคุณเสียอย่างมาก แก้ไขด้วยcd $(mktemp -d)
mniip

Meh เวลา dir ถูกตั้งค่าโดยใช้ฟังก์ชั่นห้องสมุด
Navin

@Navin ยังไม่ได้ตั้งค่า ไดเร็กทอรี inode เปิดขึ้นเพื่อการเขียนและเคอร์เนลจะอัพเดต mtime ไม่มีset mtime to this
ตึกระฟ้าที่

@mniip Welll เอาล่ะ ฉันยังรู้สึกว่าtouchเป็นฟังก์ชั่นไลบรารี / คำสั่งเนื่องจากมีผลข้างเคียงที่ต้องการ
Navin

25

PHP

ใช้ประโยชน์จากข้อเท็จจริงที่uniqid()ส่งคืน ID ตามเวลา

$u=hexdec(substr(uniqid(),0,8));

$y=floor($u/31536000);
$u-=$y*31536000;
$y+=1970;

$d=floor($u/86400);
$u-=$d*86400;

$h=floor($u/3600);
$u-=$h*3600;

$m=floor($u/60);

$s=$u-$m*60;

echo 'Year='.$y.' Days='.$d.' Hours='.$h.' Minutes='.$m.' Seconds='.$s;

ในระหว่างการทดสอบของฉันมันกลับมา: Year=2014 Days=79 Hours=18 Minutes=9 Seconds=49.
ฉันไม่รู้ว่าฉันสามารถจัดdateรูปแบบได้อย่างถูกต้องหรือไม่


2
ฉันแน่ใจว่านี่เป็นuniqidส่วนหนึ่งของกฎ ... ยังคงเป็นส่วนหนึ่งของภาษาของคุณ ... แต่คุณก็ยังได้รับ +1
mniip

ทำไม ใช่uniqidใช้ API ระดับต่ำ แต่แม้ว่าคุณจะขอเวลาจากเซิร์ฟเวอร์ภายนอกก็จะมีการเรียก API ระดับต่ำไปยังที่อื่น ...
Michael M.

1
ฉันไม่ได้พูดถึงเวลาเรียก API ที่นี่ ฉันกำลังบอกว่ามันยังคงเป็นส่วนหนึ่งของภาษา
mniip

2
@mniip ใช่ แต่uniqid()ถูกทำลายก่อนที่คำถามนี้จะถูกถาม มีเพียง API นาฬิกา / เวลาเท่านั้นที่แตกในคำถามนี้
Riking

23

DNS

พวกเราแค่เชื่อใจในเครื่องของเราเองหรือ ถ้าเป็นเช่นนี้จะนับหรือไม่

ssh $othermachine date

หากไม่นับการแยกเวลาจากการอัปเดต DNS จะทำอย่างแน่นอน:

dig stackexchange.com | grep WHEN

23

ทุบตี

เพียงเพื่อให้แม่นยำและถูกต้องอยู่เสมอ:

echo "Now"

หรือสร้างแรงจูงใจ:

echo "Now, do something useful today"

10
ประจบคำนามพหูพจน์ toadies ประจบสอพลอประจบสอพลอ; คนสอพลอ ( ที่มา )
ace_HongKongIndependence

3
ไม่การabsolutely preciseรันคำสั่งจะยังคงใช้เวลาเล็กน้อย
user80551

2
@ user80551 และนั่นคือสิ่งที่คุณผิดตอนนี้แม่นยำเสมอ หากคุณดูเวลาในการดูการเปลี่ยนแปลงก่อนที่ภาพจะมาถึงดวงตาของคุณ แต่ตอนนี้ตอนนี้อยู่เสมอตอนนี้
Master117

10
@ user80551 ใช้echo "Then"งานได้สำหรับข้อกำหนดนั้น
Taemyr

2
- อะไรที่ฉันมองอยู่ เมื่อเกิดเหตุการณ์นี้ขึ้นในโปรแกรม -Now! คุณกำลังดูที่ Now ท่านไม่ว่าจะเกิดอะไรขึ้นในโปรแกรมตอนนี้ที่กำลังเกิดขึ้น - จะผนวกท้ายอะไร - มันผ่านไปแล้ว - เมื่อไหร่? - เพียงตอนนี้
ilmale

20

curl - แม่นยำกับอัตรา ping ของคุณ

curl -s time.nist.gov:13

ดี แต่อยู่ใน UTC ไม่ควรอยู่ในเวลาท้องถิ่นใช่ไหม
orion

24
@orion เราไม่ได้อยู่ในจักรวาลหรือ
Pureferret

นี่เป็นหนึ่งในเซิร์ฟเวอร์เริ่มต้น 2 ตัวที่ windows ใช้ในการซิงค์เวลา
Ismael Miguel

@IsmaelMiguel มันยังถูกใช้โดยระบบที่ไม่ได้มาตรฐานจำนวนมาก ..
เดวิดวิลกินส์

ฉันแค่พูด ฉันไม่ได้บอกว่ามันเป็นสถานที่เดียวที่ใช้ ฉันแค่บอกความจริง
Ismael Miguel


13

Python 2

ดังนั้นนาฬิกาจะถูกต้อง แต่ API เวลาถูกปิดใช่มั้ย ทำไมไม่ตรวจสอบการประทับเวลาระบบไฟล์ raw แทนการสร้างไฟล์ทดสอบเราเพียงแค่ใช้การประทับเวลาการเข้าถึงของเราเองตั้งแต่สคริปต์ที่มีให้อ่านเพื่อให้ทำงานได้ (แม้ว่าจะได้รับการรวบรวม) แม่นยำถึงวินาที *

import os
h, m = divmod(os.stat('t.py').st_atime % 86400, 3600)
print h+1, m // 60, m % 60

t.pyนี้ควรจะถูกบันทึกไว้และทำงานเป็น หรือรับชื่อสคริปต์ตอนรันไทม์ด้วยinspect.getfile(inspect.currentframe())

หมายเหตุ * บางครั้งความแม่นยำในการ วินาทีก่อนหน้า


เราควรตรวจสอบt.pycหรือt.pyoแทน
Kyle Kelley

1
การคิดดี แต่สิ่งเหล่านี้จะไม่มีอยู่เว้นแต่คุณจะนำเข้าไฟล์นี้เป็นโมดูล (หรือสร้างด้วยตนเอง) อย่างไรก็ตามฉันได้ตรวจสอบแล้วและ python (2.7.2 สำหรับ OS X) จะแตะ.pyไฟล์แม้ว่าจะมีไฟล์ที่เกี่ยวข้อง.pycอยู่ก็ตาม ดังนั้นสิ่งนี้จะทำงานได้อย่างถูกต้องเสมอ
alexis

ตั้งข้อสังเกตและ upvoted ทำได้ดีมาก
Kyle Kelley

10

ทับทิม

HTTP แต่ใช้เมตาดาต้าการตอบสนอง

require 'uri'
require 'net/http'

def get_now
  uri = URI.parse("http://google.com")
  http = Net::HTTP.new(uri.host, uri.port)
  request = Net::HTTP::Get.new(uri.request_uri)
  rsp = http.request(request)
  rsp['date']
end

9

PS

ไม่สามารถpsบอกเวลาหรือไม่ มันสามารถ!

sleep 1&  ps -o lstart -p $!

กระบวนการเริ่มต้นในพื้นหลังและpsบอกเวลาที่กระบวนการเริ่มต้น ตั้งแต่กระบวนการเริ่มต้นในพื้นหลังเวลาเริ่มต้นของกระบวนการค่อนข้างมากในเวลาเดียวกันกับตอนนี้

นอกจากนี้ข้อดีคือเวลาได้รับในเขตเวลาท้องถิ่น และคุณไม่จำเป็นต้องเชื่อมต่ออินเทอร์เน็ตเช่นกัน!


7

VBA

เพราะฉันไม่ควร

Public Function DateTime() As String
Dim myNTPsvr As String
Dim dattime As String
Dim oHTTP As Object

myNTPsvr = "time.windows.com"
Set oHTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
oHTTP.Open "GET", "http://" & myNTPsvr & "/", False
oHTTP.Send

DateTime = oHTTP.GetResponseHeader("Date")

Set oHTTP = Nothing
End Function

ใช้?DateTimeเพื่อใช้หรือถ้าคุณใส่ลงใน Excel จากนั้น=DateTime()จะทำงานเป็นสูตร
วันที่ / เวลาถูกส่งคืนใน GMT - ฉันปล่อยให้มันเป็นแบบฝึกหัดที่ไร้ประโยชน์ในการแปลงจากสตริงเป็นเวลาท้องถิ่น


6

Bash + last+ head+cut

แม่นยำถึงวินาที lastใช้ไฟล์บันทึก/var/log/wtmp

$ last -RF reboot | head -n1 | cut -c50-73
Tue Mar 11 09:38:53 2014
$ 

แก้ไข: เพิ่มheadเพื่อ จำกัด เพียงหนึ่งบรรทัด

แก้ไข: วิธีนี้ใช้ได้กับ Linux Mint 13 Cinnamon 64 บิต แต่ดูเหมือนว่าสิ่งนี้ขึ้นอยู่กับ distro ของคุณ sysvinit-utils(ซึ่งมีlast) รุ่น2.88dsf-13.10ubuntu11.1 lastอ่านจาก/var/log/wtmp(ในกรณีของฉัน) ดังนั้นผลลัพธ์ขึ้นอยู่กับไฟล์บันทึกนั้น ดูความคิดเห็นด้านล่าง

แก้ไข: เห็นได้ชัดว่าสิ่งนี้ขึ้นอยู่กับสถานะการออนไลน์ของระบบเพื่อให้คุณสามารถดูหลักฐานได้ที่นี่http://imgur.com/pqGGPmE


ส่งคืนบรรทัดว่างที่นี่ และฉันไม่แน่ใจว่าสามารถดึงข้อมูลใด ๆ ที่เกี่ยวข้องออกมาได้อย่างที่คนlastพูดว่า“ ผู้ใช้หลอกรีบูตบันทึกในแต่ละครั้งที่ระบบรีบูท” (และไม่ได้ถูกต้องที่นี่: pastebin.com/ArUaBcuY )
จัดการ

@manatwork imgur.com/SeJX9RAจริง-Fพิมพ์เข้าสู่ระบบเต็มรูปแบบและออกจากระบบครั้ง เนื่องจากผู้ใช้ปัจจุบันยังคงเข้าสู่ระบบเวลาออกจากระบบเป็นเวลาปัจจุบัน นี่คือบน Linux Mint 13 อบเชย 64 บิต มันอาจจะขึ้นอยู่กับสถานที่ แต่ฉันสงสัยมัน
user80551

@manatwork มันทำงานที่นี่เช่นกัน
user80551

2
ใช้งานไม่ได้บน arch (systemd) ส่งคืน "ยังคงทำงานอยู่"
orion

5
ที่จริงแล้ว "ยังคงทำงานอยู่" เป็นเวลาที่ถูกต้องตามหลักปรัชญาอย่างน้อยที่สุด
orion

5

หลาม

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

import subprocess

def what_day_is_it(): return int(subprocess.check_output(["date", "+%dd"]))[:-2];

current_day = next_day = what_day_is_it # It's a bash call, 
while not current_day - next_day:
  next_day = what_day_is_it()
print "It's midnight."
print "Probably."

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

def what_year_is_it(): return int(subprocess.check_output(["date", "+%yy"]))[:-2];

อาจจะช้าลงเล็กน้อย ฉันยังไม่ได้ทดสอบ


5

brainfuck

>+++++++[-<++++++++>]<---.>+++++[-<+++++>]<++.---.>++++++++[-<-------->]<---.

เอาท์พุท:

5PM

ฉันคิดว่ามันแสดงเวลาในเดนเวอร์ในขณะที่เขียน คำอธิบายสำหรับอัลกอริทึมที่นี่โดยวิดีโอAlan Jacksonนี้


xkcd.com/221แต่สำหรับเวลาฉันเห็น
Val

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

แต่มันช่วยประหยัดเวลาจริงๆ! ในผลการปฏิบัติการจริง
Val

5

ทับทิม

`date`

ไม่ใช้ API นาฬิกา / เวลาของภาษา


มันทำอะไรกันแน่
Hosch250

1
ดำเนินการคำสั่ง date ในเชลล์และส่งคืนเอาต์พุต
bblack

4

ฉันชอบแนวคิด "การอ่านจากเซิร์ฟเวอร์เวลา" ปรับปรุงการจัดรูปแบบของมันและเพิ่มบางเมืองเพื่อความสนุกสนาน

PHP

$page = file_get_contents("http://www.timeapi.org/utc/now");
echo "In London: ".date("H:i:s - jS F, Y", strtotime($page))."<br>";
echo "In Rome: ".date("H:i:s - jS F, Y", strtotime($page)+3600)."<br>";
echo "In Athens: ".date("H:i:s - jS F, Y", strtotime($page)+7200)."<br>";

4

ทุบตี

echo "It's eight o'clock."

ด้วยความขอบคุณในการแสดงคนโง่ (นอกจากนี้มันถูกต้องวันละสองครั้ง!)



1
@squeamishossifrage จุดที่ดี ดังนั้นถ้านี่เป็นการพักเบรคฉันมีความแม่นยำ 18 นาที! ;-)
David Richerby


4

C / WinAPI

สิ่งนี้ทำให้มีข้อสันนิษฐานว่าการเรียก API ของตัวเองเพื่อสอบถามนาฬิกาไม่ทำงาน แต่ระบบสามารถทำงานกับเวลาได้อย่างถูกต้อง

// NO ERROR CHECKING - that's left as an exercise for the reader
TCHAR tmpfilename[MAX_PATH];
TCHAR tmpfilepath[MAX_PATH];

// get some information to create a temporary file
DWORD dwRes = GetTempPath(MAX_PATH, tmpfilepath);
UINT uiRes  = GetTempFileName(tmpfilepath, TEXT("golftime"), 0, tmpfilename);

// create the file
HANDLE hTempFile = CreateFile(tmpfilename, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);

// read the creation time of the file. accuracy is to, uhm... 10ms on NTFS?
FILETIME created;
GetFileTime(hTempFile, &created, NULL, NULL);

// convert the filetime to a system time (in UTC)
SYSTEMTIME systime;
FileTimeToSystemTime(&created, &systime);

std::cout << "Time is " <<
    systime.wHour << ":" << systime.wMinute << ":" << systime.wSecond << "." << systime.wMilliseconds << "\n";

// close the file and delete
CloseHandle(hTempFile);
DeleteFile(tmpfilename);

ความคิดคือการสร้างไฟล์ชั่วคราวและอ่านเวลาการสร้างซึ่งใน NTFS ฉันคิดว่าถูกต้องลงไป 10ms โปรดทราบว่าการจัดรูปแบบของเอาต์พุตนั้นไม่แน่นอน แต่นั่นก็เพราะฉันขี้เกียจ

เอาท์พุทบนเครื่องของฉันตอนนี้: Time is 10:39:45.790


1
// NO ERROR CHECKING - that's left as an exercise for the reader- ฉันไม่ควรเห็นสิ่งนี้ในรหัสการผลิต
wchargin

4

ชุด

@echo off
echo.>>%0
for /f "tokens=2,3 skip=4" %%a in ('dir /TW %0') do echo %%a %%b & goto :EOF

เขียนบรรทัดว่างลงในไฟล์แบตช์ (ตัวเอง) จากนั้นตรวจสอบเวลาการเขียนล่าสุดของไฟล์

H:\uprof>GetTime.bat
09:28 AM

H:\uprof>GetTime.bat
09:29 AM

3

HTML, CSS & Javascript / jQuery

ตกลงดังนั้นฉันรู้ว่านี่ไม่ใช่โปรแกรมในทางเทคนิคและอาจตกนอกเกณฑ์ แต่ในเวลาเพียงไม่กี่ชั่วโมงนี้จะเป็นนาฬิกาที่แม่นยำที่สุดในโลก!

CSS

@font-face {
    font-family:"DSDIGI";
    src:url("http://fontsforweb.com/public/fonts/1091/DSDIGI.eot") format("eot"),
    url("http://fontsforweb.com/public/fonts/1091/DSDIGI.ttf") format("truetype");
    font-weight:normal;
    font-style:normal;
}
#backer {
    background-image: url('http://i.imgur.com/w3W5TPd.jpg');
    width: 450px;
    height: 354px;
    color: red;
    font-family: 'DSDIGI';
}
#backer p {
    width: 100%;
    display: block;
    line-height: 325px;
    font-size: 60px;
}

HTML

<div id="backer">
    <p>
        BEER<span id="fade">:</span>30
    </p>
</div>

jQuery

function start() {
    $('#fade').fadeOut(function() {
        $('#fade').fadeIn();
    });
    setTimeout(start, 1000);
}
start();

ตอนแรกฉันจะทำwhile(true)ลูป แต่จำได้ว่าฉันไม่ต้องการที่จะผิดพลาดเบราว์เซอร์ใด ๆ ...

นี่คือซอของมันในการดำเนินการ: http://jsfiddle.net/E7Egu/

ป้อนคำอธิบายรูปภาพที่นี่


4
flare_points ++;
scunliffe

ฉันรักที่ 2 ปีต่อมามีคนมาและลงคะแนนนี้ ... lol
Dryden Long

3

Emacs Lisp

สิ่ง google ได้ทำ แต่ไม่ได้อยู่ใน emacs!

(url-retrieve "http://www.google.com/search?q=time" (lambda(l)            
        (search-forward-regexp "[0-9]?[0-9]:[0-9][0-9][ap]m")
        (print (buffer-substring (point) (1+ (search-backward ">"))))))

2

node.js / Javascript

var fs = require('fs'),
    util = require('util');

var date = null, time = null;

fs.readFile('/sys/class/rtc/rtc0/date', 'UTF-8', function(err, d) {
    date = d.trim();
    if(time)
        done();
})

fs.readFile('/sys/class/rtc/rtc0/time', 'UTF-8', function(err, t) {
    time = t.trim();
    if(date)
        done();
});

function done() {
    console.log(util.format('%sT%sZ', date, time));
}

1
คิดถึงการพึ่งพาเพียงไม่กี่ที่นั่น รสชาติของ Linux คืออะไร
ไม่ใช่ Charles

1
สิ่งที่ขาดหายไปไดเร็กทอรี / sys / class / rtc / rct0 ฉันอยู่บน Arch Linux
Chris

1
ใช่นั่นคือสิ่งที่ไม่ได้มีอยู่ในระบบ * nix ทุกระบบน้อยกว่ามาก!
ไม่ใช่ Charles

1

JavaScript

new Date(performance.timing.navigationStart+performance.now())+''

API นาฬิกา / เวลาไม่ทำงานฉันใช้Performance APIเพื่อรับเวลา จากนั้นDateใช้เพื่อแยกวิเคราะห์สตริงเท่านั้น


2
ถ้าไม่แน่ใจว่ามันเหมาะกับกฎ :)
Oriol

API นั้นมีการสนับสนุนที่แย่มาก
Ismael Miguel

1

PHP:

 $n=PHP_SHLIB_SUFFIX=='dll'?strtotime(str_replace(PHP_EOL,' ',`date /t&time /t`).' GMT'):`date +%s`;

นี่จะอ่านเวลาของระบบจากอินเตอร์เฟสบรรทัดคำสั่งที่มี

ตัวดำเนินการ backtick ใช้เพื่อทำสิ่งนั้น: รันคำสั่ง

อีกวิธีคือ:

$_SERVER['REQUEST_TIME'];

ซึ่งมีเวลาปัจจุบันที่สคริปต์ถูกเรียกใช้


นั่นยังไม่ขึ้นอยู่กับระบบของคุณเป็นระยะเวลาใช่ไหม
Maurice

2
บรรทัดแรกของคำถาม : "คุณรู้ว่า API นาฬิกา / เวลาของภาษาของคุณเสียและไม่น่าเชื่อถือเลย" ฉันคิดว่านี่จะอธิบายตัวเอง
Ismael Miguel

1

ทุบตี

export PS1="(\t) $PS1"

กระโปรงกฎเล็กน้อย แต่มันไม่เคยเรียกฟังก์ชั่นเวลา มันจะแสดงเวลาปัจจุบันเมื่อออกจากระบบและทุกครั้งที่คุณกด Enter หลังจากนั้น


1

C #

วิธีที่แม่นยำที่สุดนี้จะใช้งานได้หากคุณเปิดใช้งานโปรแกรมที่ 0: 00: 00,0000

using System;
using System.Threading;

namespace ConsoleApplication1 {
  class Program {
    private static volatile int s_Hour;
    private static volatile int s_Minute;
    private static volatile int s_Second;
    private static volatile int s_Millisecond;

    class Looper {
      public int Length { get; set; }
      public Action Update { get; set; }
    }

    static void Loop(object args) {
      var looper = (Looper)args;
      while (true) {
        Thread.Sleep(looper.Length);
        looper.Update.Invoke();
      }
    }

    static void Main(string[] args) {
      var starter = new ParameterizedThreadStart(Loop);
      new Thread(starter).Start(new Looper { Length = 100, Update = () => { s_Millisecond = (s_Millisecond + 100) % 1000; } });
      new Thread(starter).Start(new Looper { Length = 1000, Update = () => { s_Second = (s_Second + 1) % 60; } });
      new Thread(starter).Start(new Looper { Length = 60 * 1000, Update = () => { s_Minute = (s_Minute + 1) % 60; } });
      new Thread(starter).Start(new Looper { Length = 60 * 60 * 1000, Update = () => { s_Hour++; } });

      Console.Out.WriteLine(@"Press e to exit, enter to write current time...");
      while (true) {
        string input = Console.In.ReadLine();
        if (input == "e") {
          Environment.Exit(0);
          return;
        }
        Console.Out.WriteLine("{0:00}:{1:00}:{2:00},{3}", s_Hour, s_Minute, s_Second, s_Millisecond);
      }
    }
  }
}

Thread.Sleep รับประกันว่าเธรดจะเข้าสู่สถานะขั้นต่ำตามที่ระบุไว้ในวงเล็บ มันสามารถเลือกที่จะนอนหลับได้นานขึ้น
ไบรอัน Boettcher

1

Linux, shells ส่วนใหญ่บนฮาร์ดแวร์ที่มี RTC:

echo `cat /sys/class/rtc/rtc0/{date,time} | tr "\n" " "`

สิ่งนี้ไม่เรียก API วันที่ / เวลา?
Hosch250

ฉันไม่ได้รับ esh subshell bit สมมุติว่าคุณต้องการทำให้คำศัพท์เว้นวรรคเป็นปกติ แต่ถ้าเป็นเช่นนั้นทำไมถึงทำtrบิต? บางทีคุณอาจเพียงต้องการpaste -d' ' /sys/class/rtc/rtc0/{date,time}?
kojiro

ถ้าฉันลองทำในราสเบอร์รี่ PI ซึ่งไม่มี RTC ล่ะ!
จอร์จ

@kojiro ใช่และวิธีการของคุณสะอาดขึ้น
trav

1

ชวา

เราทุกคนรู้ว่า Java Date / Time API นั้นใช้งานไม่ได้และใช้งานไม่ได้ ดังนั้นนี่คือการแก้ไขที่ไม่ใช้อย่างน้อย API โดยตรงที่มีอยู่ มันยังรองรับวินาทีกระโดด! :) ผลลัพธ์อยู่ใน UTC

import java.lang.reflect.Field;
import java.net.HttpCookie;
import java.util.*;

public class FixedTimeAPI4Java {

    private static final List<Integer> MONTHS_WITH_30_DAYS = Arrays.asList(4, 6, 9, 11);
    private static final List<Integer> YEARS_WITH_LEAP_SECOND_IN_DECEMBER = Arrays.asList(1972, 1973, 1974, 1975, 1976, 1977, 1978, 1979, 1987, 1989, 1990, 1995, 1998, 2005, 2008);
    private static final List<Integer> YEARS_WITH_LEAP_SECOND_IN_JUNE =  Arrays.asList(1972, 1981, 1982, 1983, 1985, 1992, 1993, 1994, 1997, 2012);

    /**
    * Returns the UTC time, at the time of method invocation, with millisecond
    * precision, in format <code>yyyy-MM-dd HH:mm:ss.SSS</code>.
    */
    public String getTime() throws Exception {

        // The cookie is only used for accessing current system time
        HttpCookie cookie = new HttpCookie("Offline", "Cookie");
        Field created = HttpCookie.class.getDeclaredField("whenCreated");
        created.setAccessible(true);

        long millisecondsSinceEpoch = created.getLong(cookie);        
        long fullSecondsSinceEpoch = millisecondsSinceEpoch / 1000L; 

        int year = 1970, month = 1, dayOfMonth = 1, hour = 0, minute = 0, second = 0,
            millisecond = (int)(millisecondsSinceEpoch - (fullSecondsSinceEpoch * 1000L));

        ticks: 
        for (;; year++) {
            for (month = 1; month <= 12; month++) {
                for (dayOfMonth = 1; dayOfMonth <= daysInMonth(month, year); dayOfMonth++) {
                    for (hour = 0; hour < 24; hour++) {
                        for (minute = 0; minute < 60; minute++) {
                            for (second = 0; second < secondsInMinute(minute, hour, dayOfMonth, month, year); second++, fullSecondsSinceEpoch--) {
                                if (fullSecondsSinceEpoch == 0) {
                                    break ticks;
                                }
                            }
                        }
                    }
                }
            }
        }
        return String.format("%04d-%02d-%02d %02d:%02d:%02d.%03d", year, month,
            dayOfMonth, hour, minute, second, millisecond);
    }

    /**
     * Returns the seconds in the given minute of the given hour/day/month/year,
     * taking into account leap seconds that can be added to the last minute of
     * June or December.
     */
    private static int secondsInMinute(int minute, int hour, int day, int month, int year) {
        return (minute == 59 && hour == 23 && ((day == 30 && month == 6) || (day == 31 && month == 12))) 
                ? 60 + leapSecondsInMonth( month, year) 
                : 60;
    }

    /**
     * Returns the number of days in the given month of the given year.
     */
    private static int daysInMonth(int month, int year) {
        return month == 2 ? isLeapYear(year) ? 29 : 28
                : MONTHS_WITH_30_DAYS.contains(month) ? 30
                    : 31;
    }

    /** 
     * Returns whether the given year is a leap year or not. 
     * A leap year is every 4th year, but not if the year is divisible by 100, unless if it's divisible by 400.
     */
    private static boolean isLeapYear(int year) {
        return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)) ? true : false;
    }

    /** 
     * Returns the number of leap seconds that were added to UTC time at the end of the given month and year.
     * Leap seconds are added (by the decison of International Earth Rotation Service / Paris Observatory)
     * in order to keep UTC within 0.9 seconds of international atomic time (TAI).
     * <p>TODO: implement parser for updated list at http://www.ietf.org/timezones/data/leap-seconds.list :)
     */
    private static int leapSecondsInMonth(int month, int year) {        
        return (year < 1972 || year > 2012) ? 0
                : (month == 6 && YEARS_WITH_LEAP_SECOND_IN_JUNE.contains(year)) ? 1
                    : (month == 12 && YEARS_WITH_LEAP_SECOND_IN_DECEMBER.contains(year)) ? 1
                        : 0;
    }

    public final static void main(String[] args) throws Exception {
        System.out.println(new FixedTimeAPI4Java().getTime());        
    }
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.