Win32 读取和设置系统时间

参考文档 https://docs.microsoft.com/zh-cn/windows/win32/api/sysinfoapi/

Win32

[StructLayout(LayoutKind.Sequential)]
public struct SystemTime
{
    [MarshalAs(UnmanagedType.U2)]
    internal ushort year; // 年
    [MarshalAs(UnmanagedType.U2)]
    internal ushort month; // 月
    [MarshalAs(UnmanagedType.U2)]
    internal ushort dayOfWeek; // 星期
    [MarshalAs(UnmanagedType.U2)]
    internal ushort day; // 日
    [MarshalAs(UnmanagedType.U2)]
    internal ushort hour; // 时
    [MarshalAs(UnmanagedType.U2)]
    internal ushort minute; // 分
    [MarshalAs(UnmanagedType.U2)]
    internal ushort second; // 秒
    [MarshalAs(UnmanagedType.U2)]
    internal ushort milliseconds; // 毫秒
}
[DllImport(Kernel32)]
internal static extern void GetLocalTime(ref SystemTime lpSystemTime);

[DllImport(Kernel32)]
internal static extern bool SetLocalTime(ref SystemTime lpSystemTime);

[DllImport(Kernel32)]
internal static extern void GetSystemTime(ref SystemTime lpSystemTime);

[DllImport(Kernel32)]
internal static extern bool SetSystemTime(ref SystemTime lpSystemTime);

C#

/// <summary>
/// 获取本地时间
/// </summary>
/// <returns></returns>
public static DateTime GetLocalTime()
{
    SystemTime sysTime = new SystemTime();
    GetLocalTime(ref sysTime);
    return SystemTime2DateTime(sysTime);
}

/// <summary>
/// 设置本地时间
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public static bool SetLocalTime(SystemTime dateTime)
{
    bool success = SetLocalTime(ref dateTime);
    return success;
}

/// <summary>
/// 获取系统时间
/// </summary>
/// <returns></returns>
public static DateTime GetSystemTime()
{
    SystemTime sysTime = new SystemTime();
    GetSystemTime(ref sysTime);
    return SystemTime2DateTime(sysTime);
}

/// <summary>
/// 设置系统时间(UTC)
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public static bool SetSystemTime(DateTime dateTime)
{
    SystemTime sysTime = DateTime2SystemTime(dateTime);
    bool success = SetSystemTime(ref sysTime);
    return success;
}

/// <summary>
/// 将SystemTime转换为DateTime
/// </summary>
/// <param name="sysTime"></param>
/// <returns></returns>
public static DateTime SystemTime2DateTime(SystemTime sysTime)
{
    return new DateTime(sysTime.year, sysTime.month, sysTime.day, sysTime.hour, sysTime.minute, sysTime.second, sysTime.milliseconds);
}

/// <summary>
/// 将DateTime转换为SystemTime
/// </summary>
/// <param name="dateTime"></param>
/// <returns></returns>
public static SystemTime DateTime2SystemTime(DateTime dateTime)
{
    SystemTime sysTime = new SystemTime
    {
        year = Convert.ToUInt16(dateTime.Year),
        month = Convert.ToUInt16(dateTime.Month),
        day = Convert.ToUInt16(dateTime.Day),
        hour = Convert.ToUInt16(dateTime.Hour),
        minute = Convert.ToUInt16(dateTime.Minute),
        second = Convert.ToUInt16(dateTime.Second),
        milliseconds = Convert.ToUInt16(dateTime.Millisecond)
    };
    return sysTime;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值