Chrono Mock
ภาษาไทย

เอกสารอ้างอิงบรรทัดคำสั่ง

ตัวเลือกทุกตัวของทั้งสองคำสั่ง ตารางรหัสออกทั้งสองตาราง และวิธีอ่านสิ่งที่ส่งกลับมา ฉบับอธิบายที่มีเหตุผลประกอบอยู่ที่หน้า CLI และ CI

สองคำสั่ง

chrono run เริ่มแอปที่วันและเวลาอื่น ส่วน chrono calc คำนวณวันที่และบอกว่าทำไมวันนั้นน่าสนใจ ทั้งสองใช้ไวยากรณ์ของสเตปชุดเดียวกัน ดังนั้นการเลื่อนที่เขียนให้คำสั่งหนึ่งจึงมีความหมายเหมือนกันในอีกคำสั่งหนึ่ง

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

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

chrono presets แสดงรายการแคตตาล็อกพรีเซ็ตตามที่ --preset อ่าน คือทุกพรีเซ็ตในโฟลเดอร์ เขียนด้วยคำที่ไวยากรณ์ของเครื่องคำนวณอ่านได้ และทุกไฟล์ที่จะถูกปฏิเสธพร้อมเหตุผล --json เขียน chronomock.presets/1 และ --dir ระบุโฟลเดอร์อื่น

chrono run <target> [options]
chrono calc [options]
chrono version        # chrono 0.4.0 (x64, protocol 1)
chrono license        # GPL-3.0-only และสิ่งที่รวมมาด้วย
chrono presets        # แคตตาล็อกตามที่ --preset อ่าน
chrono --help          # วิธีใช้ของทุกคำสั่ง

chrono run - ตัวเลือก

ตัวเลือกหน้าที่
--at <moment> ช่วงเวลาที่จะเริ่ม เขียนในเขตเวลาของเซสชัน เป็นแบบสัมบูรณ์ (2038-01-19T03:14:07) หรือแบบสัมพัทธ์ที่มีเครื่องหมายนำหน้า (+1d, -2h) หน่วยที่ใช้ได้: s m h d w mo q y - m คือนาที และ mo คือเดือน หากไม่ใส่ตัวเลือกนี้ นาฬิกาของเซสชันจะเริ่มที่เวลาจริงปัจจุบัน ดังนั้น --mode xN ตัวเดียวจึงเพียงทำให้โปรแกรมเป้าหมายรันเร็วขึ้น
--zone +HH:MM เขตเวลาของเซสชัน: เขตเวลาที่ใช้เขียนช่วงเวลา และเป็นเขตเวลาที่การเรียกเวลาท้องถิ่นของโปรแกรมเป้าหมายรายงานกลับ เป็นออฟเซ็ตคงที่ ไม่มีเวลาออมแสง หากไม่ใส่ จะใช้เขตเวลาของโฮสต์เอง
--mode flow|frozen|xN flow เดินด้วยความเร็วจริง frozen หยุดนาฬิกาไว้นิ่ง xN เดินเร็วขึ้น N เท่า (x60 ทำให้หนึ่งชั่วโมงเหลือหนึ่งนาที x1440 ทำให้หนึ่งวันเหลือหนึ่งนาที)
--scale-duration เร่งแกนเวลาที่ผ่านไปด้วย ได้แก่ ตัวนับติก เวลาอินเทอร์รัปต์ การหลับ และตัวจับเวลา การรอออบเจกต์ถูกนับและคงความยาวจริงไว้ ปิดไว้โดยค่าเริ่มต้น เพราะนาฬิกาแขวนผนังกับนาฬิกาจับเวลาเป็นคำถามคนละข้อ ตัวจับเวลาหรือการหน่วงที่ตั้งไว้ที่วันและเวลาหนึ่งจะตามนาฬิกาของเซสชันไม่ว่าจะใช้ตัวเลือกนี้หรือไม่
--scale-qpc ปรับสเกลตัวนับความละเอียดสูงด้วย ซึ่งเป็นที่ที่ monotonic ของ Python 3.13+ Stopwatch ของ .NET และ nanoTime ของ Java อ่านเวลาที่ผ่านไป ปิดไว้เป็นค่าเริ่มต้น: แอปที่จับเวลาการเรนเดอร์ด้วยตัวนับนั้นอาจดูผิดเพี้ยน
--ticks N จบเซสชันหลังจาก N ฮาร์ตบีต ครั้งละหนึ่งวินาทีจริง แล้วรายงานผล หากไม่ใส่ เครื่องมือจะคงเชื่อมอยู่จนกว่าโปรแกรมเป้าหมายและทุกโปรแกรมที่มันเริ่มซึ่งรันบนนาฬิกาของเซสชันจะออกไปหมด - ตัวเปิดแอปที่จบทันทีจะปล่อยให้เซสชันตกเป็นของแอปที่มันเริ่มไว้
--timeout <s> ยอมแพ้หลังจากผ่านไปกี่วินาทีตามที่ระบุแล้วออกด้วยรหัส 6 สำหรับไปป์ไลน์ที่ห้ามค้าง และไม่ขึ้นกับตัวเลือกนี้ เอนจินที่เงียบไป 15 วินาทีจะถูกหยุดและออกด้วยรหัส 6 เช่นกัน - ทั้งสองกรณีการรันถูกตัดกลางคัน จึงไม่มีผลสรุป
--args "..." อาร์กิวเมนต์ของโปรแกรมเป้าหมาย เป็นสตริงเดียว แยกตามกฎเดียวกับที่ Windows ใช้ - อาร์กิวเมนต์ที่มีช่องว่างจึงอยู่ครบ สำหรับเป้าหมาย Chromium จะปฏิเสธ --user-data-dir และ --remote-debugging-port แทนที่จะเขียนทับ: เซสชันต้องการโปรไฟล์แยกของตัวเอง และการรันบนโปรไฟล์เบราว์เซอร์จริงของคุณโดยไม่บอกเป็นสิ่งเดียวที่ต้องไม่เกิดขึ้น
--cwd <dir> เริ่มโปรแกรมเป้าหมายในไดเรกทอรีนั้น หากไม่ใส่ โปรแกรมเป้าหมายจะสืบทอดไดเรกทอรีของเรา ซึ่งเป็นสิ่งที่ทุกการรันทำก่อนจะมีตัวเลือกนี้ ค่าว่างเป็นการใช้งานผิดวิธี ไม่ใช่ “ไม่มีไดเรกทอรี” - การไม่ใส่กับค่าว่างเป็นคนละเรื่องกัน และมีเพียงการไม่ใส่เท่านั้นที่ Windows รับได้ ไดเรกทอรีที่ไม่มีอยู่จะหยุดเซสชันด้วย target.cwd_missing ก่อนที่จะเปิดอะไร แทนที่จะไปโผล่ภายหลังเป็นโปรแกรมเป้าหมายที่ไม่ยอมเริ่ม
--preset <id> ดึงช่วงเวลาและความเร็วจาก presets/<id>.json ใช้ร่วมกับ --at --mode และ --scale-duration ไม่ได้ เพราะเมื่อนั้นพรีเซ็ตเป็นแหล่งเดียวของทั้งสองอย่าง
--param id=value กรอกพารามิเตอร์ของพรีเซ็ต ใส่ซ้ำได้ ต้องใช้คู่กับ --preset เฉพาะใน run วันเริ่มทดลองใช้จะใช้วันที่สร้างไฟล์ปฏิบัติการของโปรแกรมเป้าหมายเองเป็นค่าเริ่มต้น พรีเซ็ตช่วงทดลองใช้จึงนับจากวันที่ติดตั้งแอปโดยคุณไม่ต้องพิมพ์
--set-after T:M ที่ฮาร์ตบีต T ให้เปลี่ยนความเร็วเป็น M ระหว่างทำงาน ตัวคูณต้องไม่ต่ำกว่า 1 - ไม่มีการหยุดนาฬิกากลางเซสชันตรงนี้
--jump-after T:moment ที่ฮาร์ตบีต T ให้กระโดดนาฬิกาไปยังช่วงเวลานั้น แบบสัมบูรณ์หรือสัมพัทธ์ก็ได้ ในเขตเวลาของเซสชัน
--force คงเซสชันไว้แม้ผลสรุปเริ่มแรกจะบอกว่าการแทนที่เวลาไม่มีผล - ตามค่าเริ่มต้นโปรแกรมเป้าหมายจะถูกหยุดแทน เพราะเซสชันที่ไม่ได้พิสูจน์อะไรเลยแย่กว่าการไม่มีเซสชัน ผลสรุปไม่เปลี่ยน รหัสออกก็ไม่เปลี่ยน ตัวเลือกนี้เพียงกำหนดว่าโปรแกรมเป้าหมายจะรันต่อหรือไม่
--no-embedded ปล่อยให้หน้าเว็บภายในแอปพลิเคชัน (WebView2, Qt WebEngine) อยู่บนนาฬิกาจริง และไม่เปิดพอร์ตดีบัก หากไม่ใช้ เซสชันจะขอให้เอนจินแบบนี้เปิดพอร์ตภายในเครื่อง แล้วนำหน้าเว็บของมันไปอยู่บนนาฬิกาของเซสชันผ่านพอร์ตนั้น ตราบที่พอร์ตเปิดอยู่ โปรแกรมอื่นใดในคอมพิวเตอร์เครื่องนี้ก็ใช้พอร์ตนั้นเข้าถึงหน้าเว็บเหล่านั้นได้
--elevated-embedded สำหรับแอปพลิเคชันที่รันในฐานะผู้ดูแลระบบ จาก Chrono Mock ที่รันในฐานะผู้ดูแลระบบเช่นกัน สำหรับแอปพลิเคชันแบบนี้ WebView2 จะไม่สนใจการตั้งค่าที่เซสชันใช้เข้าถึงหน้าเว็บของมัน ดังนั้นเซสชันจึงเขียนค่าหนึ่งค่าลงในรีจิสทรีของเครื่อง (HKLM ตั้งชื่อตามไฟล์ .exe ของแอปพลิเคชัน) ตลอดช่วงเวลาของเซสชัน แล้วลบทิ้งเมื่อจบ ขณะที่แอปพลิเคชันรันอยู่ โปรแกรมอื่นใดในคอมพิวเตอร์เครื่องนี้ก็เข้าถึงหน้าเว็บของมันผ่านพอร์ตได้ และแอปพลิเคชันมีสิทธิ์ผู้ดูแลระบบ ใช้ร่วมกับ --no-embedded ไม่ได้
--keep-background-timers เริ่มเว็บเอนจิน - เบราว์เซอร์ของแอปพลิเคชัน Chromium หรือ Electron หรือเอนจินที่อยู่ภายในแอปพลิเคชัน - โดยปิดการทำให้ตัวจับเวลาช้าลงในหน้าต่างที่ซ่อนอยู่ เพื่อให้หน้าต่างที่ย่อไว้ยังคงความเร็วของเซสชัน แอปพลิเคชันจึงทำงานเต็มความเร็วแม้ขณะถูกซ่อนด้วย แอปพลิเคชันที่เริ่มด้วยสิทธิ์ผู้ดูแลระบบผ่าน --elevated-embedded จะไม่ได้รับตัวเลือกนี้
--dry-run พิมพ์ว่าเซสชันจะเป็นอย่างไรโดยไม่เริ่มอะไรเลย: ช่วงเวลาและเขตเวลาที่ตัดสินแล้วพร้อมที่มา พรีเซ็ตกรอกอะไรลงในแต่ละพารามิเตอร์ อาร์กิวเมนต์หลังแยก และโปรแกรมเป้าหมายจะใช้กลไกใดในสองแบบ ไม่เริ่มโพรเซสใด ๆ และไม่เขียนไฟล์ใด ๆ รวมถึงไฟล์ที่ --report ระบุ จะออกด้วย 0 หากแผนทำได้จริง และออกด้วย 2 หากไม่มีโปรแกรมเป้าหมาย ซึ่งเป็นรหัสเดียวกับที่การรันจริงให้เมื่อเจอข้อเท็จจริงเดียวกัน แผนไม่มีผลสรุปและบอกไว้ว่าเช่นนั้น - มีเพียงเซสชันจริงเท่านั้นที่มี เมื่อใช้ --json แผนจะออกมาเป็นข้อมูล รวมถึง session.elevated_embedded และ session.elevated_embedded_value ซึ่งเป็นชื่อไฟล์ที่ใช้ตั้งชื่อค่าในรีจิสทรีเมื่อตัวเลือกนี้ใช้กับเป้าหมาย .exe และเป็น null ในกรณีอื่น การมีชื่ออยู่ตรงนั้นไม่ได้รับประกันว่าจะมีการเขียน เซสชันจะเขียนค่านี้ก็ต่อเมื่อ Chrono Mock เองรันในฐานะผู้ดูแลระบบ
--report <path> เขียนรายงานสำหรับมนุษย์ลงไฟล์ ผลสรุปที่ไม่ใช่ ใช้งานได้ จะขึ้นต้นไฟล์ด้วยแบนเนอร์เตือนว่าหลักฐานไม่น่าเชื่อถือ เพราะหลักฐานที่ซ่อนความสงสัยของตัวเองแย่กว่าไม่มีหลักฐาน เซสชันที่ผลสรุปเป็น ใช้งานได้ ก็ได้แบนเนอร์นี้เช่นกัน เมื่อแอปพลิเคชันไม่ได้อ่านนาฬิกาใดเลยที่เซสชันแทนที่ หรือเมื่อเป็นโปรแกรมภาษา Go ซึ่ง Chrono Mock เข้าไม่ถึงนาฬิกาของระบบ ไฟล์ยังระบุตัวการรันเองด้วย ได้แก่ เวอร์ชัน เวลาเริ่ม โปรแกรมเป้าหมาย โฟลเดอร์ของมัน และแฟล็ก
--report-args เมื่อใช้ร่วมกับ --report จะเขียนอาร์กิวเมนต์ของโปรแกรมเป้าหมายลงในไฟล์นั้นตามตัวอักษรด้วย ปิดไว้โดยค่าเริ่มต้น เพราะอาร์กิวเมนต์อาจมีรหัสผ่าน - ไฟล์จึงบอกเพียงว่ามีกี่ตัว
--json ส่งออกเซสชันเป็นเรกคอร์ดที่เครื่องอ่านได้แทนรายงาน - เป็นสตรีมเดียวกับที่หน้าต่างโปรแกรมเองใช้ เอาต์พุตของแอปคอนโซลจะไปที่ standard error ดังนั้น standard output จึงมีเพียงเรกคอร์ดและไม่มีอะไรอื่น แอปที่ยังรันอยู่เมื่อเซสชันจบจะเขียนที่นั่นต่อไป ดังนั้นอะไรก็ตามที่อ่าน standard error ไปจนสุดจะรอมัน และการรันจะบอกเรื่องนี้

chrono run - รหัสออก

รหัสออกคือผลสรุปของเซสชัน ไม่ใช่สิ่งที่แอปคืนค่ามา รหัสออกของแอปเองรายงานแยกต่างหาก ในรายงานและในข้อมูลของเซสชัน - หน้า CLI และ CI อธิบายว่าทำไมจึงออกแบบเช่นนี้

รหัสความหมาย
0ใช้งานได้ - ทุกโพรเซสที่อ่านเวลาเห็นนาฬิกาของเซสชัน
10ใช้งานได้บางส่วน - บางช่องทางครอบคลุม บางช่องทางไม่ครอบคลุม
11ใช้งานไม่ได้ - การแทนที่เวลาไปไม่ถึงช่องทางสำคัญ
4ระบุไม่ได้ - ยืนยันความครอบคลุมไม่ได้ เป็นคำว่า “บอกไม่ได้” ที่ตรงไปตรงมา ไม่เคยแกล้งทำเป็นผ่าน
12โปรแกรมเป้าหมายหายไปทันทีหลังการฉีด และไม่ทิ้งอะไรที่รันบนนาฬิกาของเซสชันไว้เลย ซึ่งบ่งชี้ว่าเป็นแอปแบบอินสแตนซ์เดียวที่ส่งต่องานให้สำเนาที่รันอยู่แล้ว หรือส่งต่อให้โปรแกรมที่เซสชันเข้าไปไม่ได้ ซึ่งมักเป็นโปรแกรมที่มีจำนวนบิตต่างกัน โปรแกรมเป้าหมายที่เริ่มแอปแล้วจบเองคือตัวเปิดแอป และเซสชันจะดำเนินต่อไปกับแอปนั้น
1ใช้งานผิดวิธี - ตัวเลือกไม่ถูกต้อง นิพจน์ไม่ถูกต้อง หรือพรีเซ็ตที่คำสั่งนี้ไม่รับ
2เปิดโปรแกรมเป้าหมายหรือฉีดเข้าไปไม่ได้
3ข้อผิดพลาดภายใน - เอนจินเริ่มไม่ได้ เจอสถานะที่ไม่คาดคิด หรือหยุดก่อนปิดเซสชัน (ไม่ว่ารหัสออกของมันเองจะเป็นอะไร) การรันแบบนี้ไม่มีผลสรุป
5การดำเนินการนี้ยังไม่ได้รวมอยู่ในรุ่นนี้ - เช่นพรีเซ็ตที่ช่วงเวลาต้องใช้ปฏิทินซึ่ง run ยังโหลดไม่ได้ แยกจากการใช้งานผิดวิธีโดยตั้งใจ: คุณขอสิ่งที่ยังไม่มี ไม่ใช่ขอสิ่งที่ผิด
6การรันถูกตัดกลางคัน - --timeout หมดเวลา หรือเอนจินไม่ตอบสนอง 15 วินาทีจึงถูกหยุด นี่ไม่ใช่ผลสรุป: เซสชันถูกขัดจังหวะ จึงไม่ได้พิสูจน์อะไรเกี่ยวกับโปรแกรมเป้าหมายทั้งสองทาง
7มีอีกเซสชันกำลังทำงานอยู่ - ทำได้ทีละเซสชัน แค่ลองใหม่หลังจากเซสชันนั้นจบก็พอ
8เซสชันได้ผลสรุปแล้ว แต่หลักฐานไม่อยู่ในไฟล์ที่ --report ระบุ - ดิสก์เต็ม หรือมีโปรแกรมอื่นเปิดไฟล์เก่าค้างไว้ ซึ่งไฟล์นั้นจะยังคงเหมือนเดิม ผลสรุปยังอยู่ในรายงานที่คำสั่งพิมพ์ออกมา

การอ่านรายงาน

หากไม่ใช้ --json เซสชันจะจบด้วยรายงานธรรมดา ทุกบรรทัดเป็นข้อเท็จจริงที่เซสชันสังเกตเห็น หรือไม่ก็ไม่ปรากฏ - ไม่มีอะไรถูกเติมด้วยค่าเริ่มต้นที่ฟังดูสมเหตุสมผล

Chrono Mock - session report
  target:   .\build\test.exe
  verdict:  WORKS - time substitution took effect  (processes: 1)
            every process that read time saw the session clock
  session:  fake clock reached 2038-01-19T03:14:08
            real elapsed 1.3s, fake elapsed 1.3s
  exited:   the target closed itself with code 3
  covered channels (substituted, with call counts, 10 calls in all):
            - pid 21240: GetSystemTimeAsFileTime (5 calls)
            - pid 21240: GetLocalTime (5 calls)
  observed channels (hooked but left real):
            - pid 21240: NtCreateUserProcess (0 calls)
  warnings:
            - the target opened a network connection ...
  • verdict - ผลสรุประดับครอบครัวของโพรเซสแม่และโพรเซสย่อยทุกตัว พร้อมจำนวนโพรเซส นี่คือตัวเลขที่รหัสออกบรรจุไว้
  • exited - รหัสออกของแอปเอง และมีเฉพาะเมื่อแอปปิดตัวเอง การรันที่จำกัดด้วย --ticks จะทิ้งโปรแกรมเป้าหมายไว้ให้รันต่อ เซสชัน Chromium เป็นเซสชันที่เครื่องมือปิดเอง และเซสชันที่ไม่เคยเริ่มก็ไม่มีรหัสแบบนั้น - บรรทัดนี้จึงหายไปแทนที่จะแสดงเลขศูนย์ที่แต่งขึ้น รหัสที่เกิดจากการแครชจะมาเป็นเลขติดลบขนาดใหญ่ จึงมีรูปแบบเลขฐานสิบหกให้ด้วย
  • covered - ช่องทางที่การแทนที่เวลาไปถึง พร้อมจำนวนครั้งที่ถูกเรียกจริง แยกตามโพรเซส จำนวนครั้งจะไม่ถูกรวมข้ามโพรเซสเด็ดขาด: การตรวจสอบของโพรเซสหนึ่งต้องไม่ยืมตัวเลขของอีกโพรเซสหนึ่ง ตัวนับหยุดที่ 1048576 และหลังจากนั้นแสดงว่าอย่างน้อยเท่านั้น
  • observed - ช่องทางที่ฮุกไว้แต่ตั้งใจปล่อยให้เป็นของจริง เช่น การรอวัตถุและตัวจับเวลามัลติมีเดีย อยู่ในกลุ่มของตัวเอง จึงไม่ถูกอ่านว่าถูกแทนที่
  • uncovered - ช่องทางที่แอปขอแต่เซสชันไม่ได้ครอบคลุม สิ่งนี้คือสิ่งที่ทำให้ผลสรุปกลายเป็น บางส่วน
  • not fully cleaned up - อะไรก็ตามที่การรื้อถอนเอาออกไม่ได้ ไม่ปรากฏเมื่อจบอย่างสะอาด ซึ่งเป็นกรณีปกติ

chrono calc - ตัวเลือก

ไม่มีภาษาธรรมชาติ: ตัวเลือกแต่ละตัวคือหนึ่งสเตป และลำดับของตัวเลือกคือลำดับของสเตป ผลลัพธ์หลังทุกสเตปจะถูกพิมพ์ออกมา สเตปที่ผิดจึงมองเห็นได้ ไม่ถูกฝังไว้

ตัวเลือกหน้าที่
--base today|now|<moment> จุดเริ่มต้น ค่าเริ่มต้นคือ today ตัดสินในเขตเวลาของเซสชัน วันที่เป็นไปไม่ได้อย่าง 2025-02-31 จะถูกปฏิเสธ ไม่ถูกปัดเป็นเดือนถัดไปโดยเงียบ ๆ
--base-utc <moment> เหมือน --base แต่จุดเริ่มต้นเป็นช่วงเวลาหนึ่งใน UTC โดยจะมี Z ต่อท้ายหรือไม่ก็ได้ ไม่ใช่ค่าที่อ่านจากนาฬิกาแขวนในเขตเวลาของเซสชัน
--shift ±N<unit> ใส่ซ้ำได้ ต้องมีเครื่องหมาย หน่วย: s m h d w mo q y bd หรือชื่อเต็ม m คือนาที mo คือเดือน เดือน ไตรมาส และปีจะพับลงบนวันที่ในปฏิทินพร้อมการตัดทอน ดังนั้นหนึ่งเดือนหลังวันที่ 31 มกราคมคือสิ้นเดือนกุมภาพันธ์ ไม่ใช่จำนวนติ๊กที่ตายตัว ส่วน bd (วันทำการ) ต้องใช้ --calendar
--set-time HH:MM:SSตั้งเวลาของวันบนผลลัพธ์ปัจจุบัน
--snap <target> กระโดดไปยังขอบเขตของช่วงเวลา: som eom soq eoq soy eoy (ต้นหรือปลายของเดือน ไตรมาส ปี) ต้นช่วงคือวันแรกเวลา 00:00:00 ปลายช่วงคือวันสุดท้ายเวลา 23:59:59
--nearest nbd|pbd วันทำการที่ใกล้ที่สุดไปข้างหน้าหรือถอยหลัง รวมวันปัจจุบันหากเป็นวันทำการอยู่แล้ว ต้องใช้ --calendar
--to-zone +HH:MM สเตปหนึ่ง: แสดงช่วงเวลาเดิมใหม่ด้วยออฟเซ็ตคงที่อีกค่าหนึ่ง ช่วงเวลาถูกรักษาไว้ ค่าเอพอกจึงไม่ขยับ เปลี่ยนเฉพาะช่องข้อมูลของเวลาพลเรือน อย่าสับสนกับ --zone
--zone +HH:MM เขตเวลาของเซสชัน ใช้ตัดสิน today และ now และใช้แสดงผลลัพธ์ หากไม่ใส่ จะใช้เขตเวลาของโฮสต์
--calendar us-banking|us-federal|pl โหลดปฏิทินวันหยุด จะเพิ่มวันทำการและวันหยุดลงในข้อมูลเมตา และเปิดใช้ bd กับ --nearest ปฏิทินอเมริกันสองแบบต่างกันที่วิธีถือวันหยุดที่ตรงกับสุดสัปดาห์ ซึ่งเป็นความผิดพลาดแบบคลาดไปหนึ่งวันที่การทดสอบมีไว้เพื่อค้นหาพอดี ปฏิทินแต่ละแบบตอบได้เฉพาะช่วงปีหนึ่ง คือ pl ตั้งแต่ปี 2002, us-federal ตั้งแต่ปี 1960 และ us-banking ตั้งแต่ปี 2008 ขั้นตอนวันทำการที่ไปถึงวันก่อนช่วงนั้นจะถูกปฏิเสธด้วยรหัส 1 และวันที่ก่อนช่วงนั้นจะแสดงว่าไม่ได้ประเมิน หากวันหยุดของปฏิทินตรวจกับกฎหมายครั้งล่าสุดเมื่อกว่าหนึ่งปีก่อน วันถัดมาที่ปฏิทินประเมินจะถูกทำเครื่องหมาย calendar_outdated เพราะอาจขาดวันหยุดที่ใหม่กว่า
--preset <id> --param id=value ช่วงเวลาที่ตั้งชื่อไว้จาก presets/<id>.json พร้อมกรอกพารามิเตอร์ ใช้ร่วมกับตัวเลือกสเตปและ --analyze ไม่ได้ และใช้ร่วมกับ --calendar --zone และ --format ได้
--analyze <date> อ่านวันที่ที่วางมาแล้วบอกว่าคืออะไร 04/08 ที่กำกวมจะแสดงทั้งสองการอ่าน คือแบบอเมริกันและแบบโปแลนด์ ไม่เดา - ความกำกวมนั้นเป็นที่มาจริงของรายงานบั๊กที่ผิด
--format <mask> พิมพ์ผลลัพธ์ตามมาสก์ของคุณเองด้วย เพื่อให้ตรงกับรูปแบบของแอปที่ทดสอบ: yyyy-MM-dd HH:mm:ss โทเค็นแยกตัวพิมพ์เล็กใหญ่ตามแบบ .NET และ Java - M คือเดือน m คือนาที
--json เอาต์พุตสำหรับเครื่อง (chronomock.calc/1) ของการใช้งานข้างต้นทุกแบบ เพื่อให้ไปป์ไลน์คำนวณวันที่แล้วส่งต่อเข้า chrono run ได้ทันที
# วันทำการสุดท้ายของไตรมาส ตามปฏิทินธนาคารอเมริกัน
chrono calc --base today --snap eoq --nearest pbd --calendar us-banking

chrono calc - รหัสออก

ตารางแยกที่เล็กกว่า: เครื่องคิดเลขไม่มีผลสรุปด้านความครอบคลุมให้รายงาน

รหัสความหมาย
0คำนวณแล้ว
1ใช้งานผิดวิธี - ตัวเลือกไม่ถูกต้อง วันที่เป็นไปไม่ได้ ค่าเกินช่วง หรือไฟล์ปฏิทินที่ไม่มีวันทำการสักวัน
5สเตปหรือหน่วยนั้นยังไม่ได้รวมอยู่ในรุ่นนี้ หรือสเตปต้องใช้ปฏิทินที่คุณไม่ได้ส่งมา แยกจากการใช้งานผิดวิธีโดยตั้งใจ เพื่อให้สคริปต์แยก “ยังไม่มี” ออกจาก “ผิด” ได้

ต่อไป