我正在尝试使用coredll.dll设置Windows Mobile设备时间。我已经创建了将设置时间的函数,但我对如何在按钮单击上调用函数来设置时间感到困惑。下面是设置时间但不确定如何在按钮单击中调用它的对象和方法
//这将是您设置系统时间所需的方法
[DllImport("coredll.dll", SetLastError=true)]
static extern bool SetLocalTime(ref SYSTEMTIME lpSystemTime);
//这是在使用SetLocalTime
之前需要填充的对象public 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;
}
//这是执行
的最终方法public static void SetSystemDateTime(DateTime dt)
{
SYSTEMTIME systime;
systime.year = (short)dt.Year;
systime.month = (short)dt.Month;
systime.day = (short)dt.Day;
systime.hour = (short)dt.Hour;
systime.minute = (short)dt.Minute;
systime.second = (short)dt.Second;
systime.milliseconds = (short)dt.Millisecond;
systime.dayOfWeek = (short)dt.DayOfWeek;
SetLocalTime(systime);
}
如何在下面的按钮点击方法中调用此功能?
private void btnSync_Click(object sender, EventArgs e)
{
//What Should I write here?
}
答案 0 :(得分:1)
首先需要实现一个DateTime变量并用你想要设置的值填充它。
DateTime localDateTime = DateTime.Now;
现在localDateTime保存(计算机)本地日期和时间值。然后,您可以根据需要更改DateTime结构的属性。例如,更改小时:
//localDateTime.Hour=13; // cannot be changed, so create a new DateTime
DateTime newDT = new DateTime(localDateTime.year, localDateTime.month, localDateTime.day,
13, localDateTime.minute, localDateTime.second, localDateTime.millisecond);
这会将DateTime Hour的值更改为13。 更改后的localDateTime现在可用于更改单击处理程序中的本地时间:
private void btnSync_Click(object sender, EventArgs e)
{
DateTime localDateTime = DateTime.Now;
//localDateTime.Hour=13; // cannot be changed, so create a new DateTime
DateTime newDT = new DateTime(localDateTime.year, localDateTime.month, localDateTime.day,
13, localDateTime.minute, localDateTime.second, localDateTime.millisecond);
SetSystemDateTime(newDT
// set datetime a second time to avoid issues when crossing DST intervals
System.Threading.Thread.Sleep(500);
SetSystemDateTime(newDT);
}
BTW:我会将SetSystemDateTime更好地命名为SetLocalDateTime,因为它改变了本地时间而不是系统时间。本地时间根据系统时间加上计算机时区偏移设置(即GMT + 1)加上当前的夏令时时间(如果有)计算得出。另一种方法也适用,其中设置本地时间会更改系统时间与偏移量。
注意:由于TZ或DST更改,本地时间可能会发生变化,但所有计算机(香港或纽约)的系统时间都相同。否则,IT世界就会失去同步。
还有一个使用相同模式调用的SetSystemTime API函数:
[DllImport("coredll.dll", SetLastError=true)]
static extern bool SetSystemTime(ref SYSTEMTIME lpSystemTime);
虽然有人可能会考虑在更改小时值时调整dayofweek。但是如果你改变任何其他值,就没有必要。
请记住两次调用SetSystemTime或SetLocalTime以避免在穿越DST区域时出现问题。另请参阅http://www.hjgode.de/wp/2010/10/08/windows-mobile-setsystemtime-and-dst-einsteins-relativity-theory/
答案 1 :(得分:0)
您可以从VS工具箱中拖动dateTimePicker1
元素,然后将其放入表单中。它将命名为:btnSync
。
如果您的表单中有一个按钮名称private void btnSync_Click(object sender, EventArgs e)
{
DateTime dtToBeSet = dateTimePicker1.Value;
SetSystemDateTime(dtToBeSet);
}
,要设置您点击该按钮时的设备日期和时间,您可以这样做:
DateTimePicker
如果您没有使用DateTime
,则无论如何都要从UI元素中检索您的值,创建class ListUsers(APIView):
"""
View to list all users in the system.
* Requires token authentication.
* Only admin users are able to access this view.
"""
authentication_classes = (authentication.TokenAuthentication,)
permission_classes = (permissions.IsAdminUser,)
def get(self, request, format=None):
"""
Return a list of all users.
"""
usernames = [user.username for user in User.objects.all()]
return Response(usernames)
然后进行设置。