上下文
我正在ESP8266上运行Web服务器,并想在设备上实现自动DST。目前,我正在从客户端获取时间设置。我使用的是ESP8266 SDK,而不是Arduino。
信息流
Web服务器没有Internet连接,只有WiFi。
| Web服务器| | WiFi | |客户端| |互联网|
如何发送TZ字符串。
| Web服务器|
客户端可以是任何可以运行现代浏览器的东西。
问题
是否可以使用JavaScript通过以下格式从客户端获取DST设置?
std offset dst [offset],开始[/ time],结束[/ time]
我可以使用以下方法获取时区字符串:
Intl.DateTimeFormat().resolvedOptions().timeZone
我正在使用的当前系统不支持该格式。
:字符
Witch是以上JavaScript返回的格式。如果我没记错的话。
代码
time_t now =0;
struct tm timeinfo;
setenv("TZ","IST-2IDT,M3.5.5/2,M10.5.0/2",1);
tzset();
timeinfo.tm_sec = sec;
timeinfo.tm_min = min;
timeinfo.tm_hour = hour;
timeinfo.tm_mday = date;
timeinfo.tm_mon = mon;
timeinfo.tm_year = year + 100;
timeinfo.tm_wday = weekd;
//set the time manually
now = mktime(&timeinfo);
if(now < 0){
//handle error
ESP_LOGE(__func__,"Time error");
}else{
localtime_r(&now,&timeinfo);
//print tm_isdst value
ESP_LOGW(__func__,"DST is active %d",timeinfo.tm_isdst);
char strftime_buf[64];
strftime(strftime_buf,sizeof(strftime_buf),"%c",&timeinfo);
//print time str
ESP_LOGI(__func__,"The current date/time: %s",strftime_buf);
}
问题
如果我将IST-2IDT,M10.5.0/2
设置为可用的TZ,则timeinfo.tm_isdst
变量会在预期的日期和时间发生变化。如果我用Asia/Jerusalem
设置TZ,则timeinfo.tm_isdst
变量仅保持为0。还用America/New_York
进行了测试,结果相同。
参考
我之所以不使用'Almost Identical Use Case'的原因是,我的ram和存储器严重不足,无法在Web服务器上存储大型C字符串。