又是一个奇怪的问题

jinheking 2007-03-22
import std.stdio;
import std.date;

writefln("UTC  :%s", toTimeString(getUTCtime()));
writefln("Local:%s", toTimeString(UTCtoLocalTime(getUTCtime())));

居然结果是一样的都是伦敦时间
UTC  :08:01:52 GMT+0000
Local:08:01:52 GMT+0000

如何能够得到本地时间?
jinheking 2007-03-22
http://www.digitalmars.com/d/archives/D/gnu/1829.html

这里也有人提出同样的问题
jinheking 2007-03-22
http://www.digitalmars.com/d/archives/digitalmars/D/bugs/189.html
这里也是,好像说在Linux下面没有问题
qiezi 2007-03-23
库里面getLocalTZA实现有些问题,那个API似乎并不保证成功,所以LocalTZA一直是0。

自己做了个简单的:
import std.stdio;
import std.date;


version (Windows){
	private import std.c.windows.windows;

	d_time getLocalTZA1()
	{
		SYSTEMTIME local;
		SYSTEMTIME system;
		GetLocalTime(&local);
		GetSystemTime(&system);

		long interval = ((local.wDay - system.wDay) * 24 + local.wHour - system.wHour) * 60/*minutes*/ * 60/*seconds*/ * 1000/*ms*/;
		return interval;
	}
}

void main(){
	version (Windows) LocalTZA = getLocalTZA1();
	writefln("UTC  :%s", toUTCString(getUTCtime()));
	writefln("Local:%s", toString(getUTCtime()));
}

不过并不方便替换到库里面,只能希望它下一版改掉。
jinheking 2007-03-23
谢谢!
qiezi 2007-03-23
用toTimeString还是会显示同样的时间,不过变成本地的了,可能toTimeString本身只支持本地时间(以前是timezone错误)。算了,等它新版本改掉这BUG吧。。
Global site tag (gtag.js) - Google Analytics