使用时区在纯 C 中进行日期格式化

Date formatting in pure C using time zones

我想将 Unix 毫秒转换器实现为人类可读的日期格式。 使用此 post 我发现我可以收到这样的字符串,但我无法在代码中设置时区。该代码仅使用系统时区。

#include <stdio.h>
#include <time.h>

int main ( int argc, char *argv[] )
{
    time_t now;
    struct tm *lcltime;

    now = time ( NULL );
    lcltime = localtime ( &now );

    printf ( "The time is %d:%d\n", lcltime->tm_hour, lcltime->tm_min );

    return 0;
}

可以定制吗?

编辑

我需要一些类似Java的方法:

SimpleDateFormat df= new SimpleDateFormat("dd MMM hh:mm z",Locale.ENGLISH);
df.setTimeZone("Europe/London");
System.out.println("London Time " + df.format(System.currentTime()));
df.setTimeZone("Asia/Benjin");
System.out.println("Benjin Time " + df.format(System.currentTime()));

EDIT_2

我发现我可以使用 setenv(...) 设置时区 url

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main (int argc, char *argv[])
{
    struct tm *mt;
    time_t mtt;
    char ftime[10];

    setenv("TZ", "PST8PDT", 1);
    tzset();
    mtt = time(NULL);
    mt = localtime(&mtt);
    strftime(ftime,sizeof(ftime),"%Z %H%M",mt);

    printf("%s\n", ftime);
}

可在更改系统时区。我只需要在我的代码中修改时区。

您可以根据需要的时差将参数更改为localtime

now += (time_t)(3600*TIME_DIFF_IN_HRS)
lcltime = localtime ( &now );

为了完全便携,您可以参考this post

获取当前时区