เอกสารอ้างอิงบรรทัดคำสั่ง
ตัวเลือกทุกตัวของทั้งสองคำสั่ง ตารางรหัสออกทั้งสองตาราง และวิธีอ่านสิ่งที่ส่งกลับมา ฉบับอธิบายที่มีเหตุผลประกอบอยู่ที่หน้า 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 | สเตปหรือหน่วยนั้นยังไม่ได้รวมอยู่ในรุ่นนี้ หรือสเตปต้องใช้ปฏิทินที่คุณไม่ได้ส่งมา แยกจากการใช้งานผิดวิธีโดยตั้งใจ เพื่อให้สคริปต์แยก “ยังไม่มี” ออกจาก “ผิด” ได้ |