Tôi có một chuỗi có chứa một ngày local/thời gian và tôi cần phải chuyển nó sang một giá trị time_t (theo giờ UTC) - Tôi đã cố gắng này:Chuyển đổi chuỗi chứa localtime sang UTC trong C
char* date = "2009/09/01/00";
struct tm cal = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL};
strptime(date, "%Y/%m/%d/%H", &cal);
time_t t = mktime(&cal);
nhưng giá trị time_t mà tôi nhận được là giá trị mà tôi mong đợi nếu chuỗi đã được phân tích cú pháp dưới dạng UTC không phải giờ địa phương. Có lẽ tôi đã hiểu lầm những gì strptime là nghĩa vụ phải làm, nhưng trong múi giờ của tôi (Anh) vào ngày 01 tháng 9 chúng tôi đang sử dụng BST (tức là UTC + 1 giờ) vì vậy tôi mong đợi giá trị tôi kết thúc với được 1 giờ trước UTC .
Có cách nào để diễn giải chuỗi là giờ địa phương, tự động tính đến khoản bù trừ UTC có thể có hiệu lực vào ngày đó không? Lưu ý rằng tôi cần giá trị time_t không phải là cấu trúc tm, trong ví dụ trên tôi muốn giá trị time_t tương ứng với 2009-09-01 01:00:00 GMT
cảm ơn, nhưng giá trị time_t mà tôi quan tâm - nếu tôi làm mktime() trên 'localcal' struct trong mã của bạn nó mang lại cho tôi kết quả tương tự như làm mktime() trên ' cal '. Tôi cần một số cách để tạo ra một giá trị time_t tương đương với '2009-09-01 01:00 GMT' – codebox
Quy ước C là lưu trữ time_t như số giây từ 1970-01-01 trong UTC. Nó đã thay đổi nó thành giờ địa phương chỉ để giải thích hoặc hiển thị. Nếu bạn muốn giới thiệu rob_t làm biến thể cục bộ, bạn có thể tính số giây giữa gmtime() và localtime() và thêm số đó vào time_t của bạn. :) – Andomar
ok, nhưng tôi muốn giải thích chuỗi là giờ địa phương, không tạo ra thời gian tương đương cục bộ của chuỗi thời gian UTC. Trong ví dụ của chúng tôi, giả định rằng chúng ta đang sống trong GMT + 1, chuỗi "2009/09/01/00" là giờ địa phương của chúng tôi, và vì vậy nó tương đương với "2009/09/01/01" trong GMT, và vì vậy mã phải trả về giá trị time_t tương ứng với "2009/09/01/01". Điều đó có ý nghĩa? – codebox