我正在使用带有C#3.5的Windows Mobile 6.5 SDK。我需要使用服务器(ASP.NET)日期/时间更改移动日期/时间。我找不到任何东西。
更新:我正在处理时区问题。如果服务器和客户端在同一时区,那么我没有问题。但如果时区不同,我将面临问题。
答案 0 :(得分:4)
更改移动设备上的时间并不难 - openNETCF帮助程序更容易,否则您需要执行以下操作:
// Compiling for Windows Mobile
[DllImport("coredll.dll")]
static extern bool SetLocalTime(ref SYSTEMTIME time);
private void SetTime()
{
SYSTEMTIME st;
// Thanks to Jim Hollenhorst <hollenho@attbi.com>
DateTime trts = DateTime.Now.AddMilliseconds(LocalClockOffset);
st.year = (short)trts.Year;
st.month = (short)trts.Month;
st.dayOfWeek = (short)trts.DayOfWeek;
st.day = (short)trts.Day;
st.hour = (short)trts.Hour;
st.minute = (short)trts.Minute;
st.second = (short)trts.Second;
st.milliseconds = (short)trts.Millisecond;
SetLocalTime(ref st);
}
SYSTEMTIME是:
private struct SYSTEMTIME
{
public short year;
public short month;
public short dayOfWeek;
public short day;
public short hour;
public short minute;
public short second;
public short milliseconds;
}
LocalClockOffset是预期时间和当前时间之间的预先计算的差异。
您的查询的另一部分现在是与服务器同步。如果您将服务器同步到time-a.nist.gov,那么您也可以同步手机。
Valer Bocan为此提供了优秀的代码,这就是上述内容的来源。链接:http://www.bocan.ro/sntpclient
我没有这样做,但可能会让您的服务器充当时间服务器,而是将您的手机指向服务器而使用相同的协议?
最后时区 - 在我的PDA项目中,我已经将日期时间作为格林威治标准时间与格林威治标准时间+/-偏移量。
答案 1 :(得分:3)
我遇到了同样的问题,并使用OpenNETCF API来解决它。
首先,您应该下载HERE。
在同步时,您应该将日期传递给PDA,如果您希望可以使用xml文件或使用数据库来设置所需的日期。
在项目的引用上使用OpenNETCF.WindowsCE.dll,请执行以下操作:
OpenNETCF.WindowsCE.DateTimeHelper.SystemTime =
new DateTime(2012, 12, 23, 23, 00, 00);
通过这样做,您可以将当前日期更改为'2012-12-23 23:00:00'
我已经在6.1手机上测试了这个解决方案,但我猜6.5会做得很好。
答案 2 :(得分:1)
当您处理服务器和数据并同步更改时,您应始终使用UTC时间值而不是(可能错误设置本地时间)。
想象一下,当不同时间区域的两个移动设备使用可能错误的本地时间/时区更改相同数据时会发生什么。所以,始终使用UTC。
其次,Windows移动设备已经支持开箱即用的时间同步。注册表中有一个时间服务器条目,操作系统使用它来同步时间。然后可能有一项服务使用手机提供商数据(NITZ)同步时间和设置时区和当地时间..
〜约瑟夫