Tôi đã viết một hàm trả lại giá trị time_t
tương ứng với nửa đêm vào một ngày nhất định. Khi không có nửa đêm trong một ngày nhất định, nó sẽ trả về thời gian sớm nhất có sẵn; tình huống đó có thể xảy ra, ví dụ, khi Ai Cập vào thời gian tiết kiệm ánh sáng ban ngày. Năm nay, thời gian thay đổi có hiệu lực vào nửa đêm vào đêm ngày 29 tháng 4, vì vậy đồng hồ chạy trực tiếp từ 23:59 đến 01:00.Làm cách nào để chương trình Windows tạm thời thay đổi múi giờ của nó?
Bây giờ tôi đang viết các bài kiểm tra đơn vị cho chức năng này và một trong các bài kiểm tra sẽ nhân rộng kịch bản Ai Cập. Trong Unix, tôi có thể thực hiện nó như thế này:
putenv("TZ", "Egypt", true);
tzset();
Sau khi làm điều đó, các cuộc gọi hơn nữa để localtime
cư xử như thể họ đang ở Ai Cập thay vì Minnesota, và thử nghiệm của tôi vượt qua. Tuy nhiên, việc thiết lập biến môi trường không có bất kỳ hiệu ứng nào trên Windows. Tôi có thể làm gì để làm cho bài kiểm tra đơn vị nghĩ rằng nó ở một nơi khác mà không ảnh hưởng đến phần còn lại của các chương trình đang chạy trên hệ thống?
whoosh .. có thể làm một cái móc để thay đổi hành vi của địa phương cho các bài kiểm tra của bạn thay thế? –