调用SetLocalTime更新本地时间,总返回false,如何解决?

风淡云清2013 2022-02-18 08:56:55

在网上搜了一段 更新本地时间的代码,如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text.RegularExpressions;
using System.Runtime.InteropServices;
using System.Runtime;

public class UpdateTime
{
    [DllImport("kernel32.dll")]
    private static extern bool SetLocalTime(ref SYSTEMTIME time);

    [StructLayout(LayoutKind.Sequential)]
    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;
    }

    public static bool SetDate(DateTime dt)
    {
        SYSTEMTIME st;

        st.year = (short)dt.Year;
        st.month = (short)dt.Month;
        st.dayOfWeek = (short)dt.DayOfWeek;
        st.day = (short)dt.Day;
        st.hour = (short)dt.Hour;
        st.minute = (short)dt.Minute;
        st.second = (short)dt.Second;
        st.milliseconds = (short)dt.Millisecond;
        bool rt = SetLocalTime(ref st);
        return rt;
    }
}

如下调用

           if (UpdateTime.SetDate(Convert.ToDateTime(labServerDate.Text)))
            {
                MessageBox.Show("同步成功!");
            }

总是返回false,,请问哪里的问题 

...全文
903 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mo_LiYang 2022-06-26
  • 打赏
  • 举报
回复

楼主解决这个问题了吗?我的也是总返回false

吉普赛的歌 2022-02-18
  • 打赏
  • 举报
回复

试下下控制台,没有问题的:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;

namespace ConsoleApp21
{
    class Program
    {
        static void Main(string[] args)
        {
            DateTime dt = DateTime.Now.AddHours(1);
            bool r = UpdateTime.SetDate(dt);
            Console.WriteLine(r);
            Console.Read();
        }
    }


    public class UpdateTime
    {
        [DllImport("kernel32.dll")]
        private static extern bool SetLocalTime(ref SYSTEMTIME time);

        [StructLayout(LayoutKind.Sequential)]
        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;
        }

        public static bool SetDate(DateTime dt)
        {
            SYSTEMTIME st;

            st.year = (short)dt.Year;
            st.month = (short)dt.Month;
            st.dayOfWeek = (short)dt.DayOfWeek;
            st.day = (short)dt.Day;
            st.hour = (short)dt.Hour;
            st.minute = (short)dt.Minute;
            st.second = (short)dt.Second;
            st.milliseconds = (short)dt.Millisecond;
            bool rt = SetLocalTime(ref st);
            return rt;
        }
    }
}


风淡云清2013 2022-02-18
  • 举报
回复
@吉普赛的歌 请问你是什么系统?我的总是返回false,我用windows10 组策略中 “用户权限分配-》更改系统时间-》加入everyone ” 还是返回false.
吉普赛的歌 2022-02-19
  • 举报
回复
@风淡云清2013 Win10 64位
风淡云清2013 2022-02-19
  • 举报
回复
@吉普赛的歌 我把UpdateTime放到了CommonLib项目,移动到主项目,再使用管理员,解决了
1条回复
sdfsvbvcbcb 2022-02-18
  • 打赏
  • 举报
回复

是否使用管理员权限运行软件

风淡云清2013 2022-02-18
  • 举报
回复
@sdfsvbvcbcb 使用了管理员权限,windows10的系统上调试的,不知还有什么要注意的??

111,088

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧