使用C ++获取不同时区的当前时间

时间:2010-07-27 20:47:41

标签: c++ c timezone

如何获取不同时区的当前时间?例如,我需要知道新加坡的当前时间,因为我的系统设置为PT时间。

4 个答案:

答案 0 :(得分:6)

一个非常古老的问题的新答案。

鉴于C ++ 11或C ++ 14编译器和this timezone library,新加坡目前的时间是:

views.py:
shift_table=[]
for project in calendar_projects:
    shift_table.append([])
    project_branches = project.branches.all()
    for i, week in enumerate(month):
        for day in week:
            shift_table[-1].append(
                CreateShiftCalendarForm(initial={'date': day}, branch_choices=project_branches))


forms.py:
CreateShiftCalendarForm(EditShiftCalendarForm):

    class Meta(ShiftForm.Meta):
        fields = ('project_branch', 'date') + ShiftForm.Meta.fields
        widgets = {'date': forms.HiddenInput(), 'length': forms.NumberInput(attrs={'step': 'any'}), 'project_branch': forms.Select()}

    def __init__(self, *args, **kwargs):
        branch_choices = kwargs.pop('branch_choices', ProjectBranch.objects.none())
        super(CreateShiftCalendarForm, self).__init__(*args, **kwargs)

        self.fields['project_branch'].queryset = branch_choices
        self.fields['project_branch'].empty_label = None

只为我输出:

#include "tz.h"
#include <iostream>

int
main()
{
    using namespace std::chrono;
    std::cout << date::make_zoned("Asia/Singapore", system_clock::now()) << '\n';
}

这给出了当前使用的本地日期,时间和缩写。它基于2015-08-19 05:25:05.453824 SGT 库和IANA timezone database

<chrono>返回UTC时区的时间戳。该程序查找“亚洲/新加坡”的时区信息,并将UTC时间戳转换为表示该位置的当地时间和当前时区的对。

上述程序独立于计算机的当前时区。

答案 1 :(得分:3)

一种实现方式是使用time以UTC格式获取当前时间,然后将TZ环境变量操作到目标时区。然后使用localtime_r转换为该时区的当地时间。

答案 2 :(得分:1)

尽可能使用UTC(GMT)。

如果您需要(例如)打印要转到其他时区的报告,请使用SystemTimeToTzSpecificLocalTime()之类的内容进行本地化。

答案 3 :(得分:0)

您可以转换为GMT,然后转换为您想要的任何时区。