C语言中time_t到.NET的转换与更改系统时间

本文介绍了一种方法,用于将C++服务器传递的时间戳(time_t类型)转换为C#中的DateTime对象,并提供了调整客户端系统时间的具体实现。

最近在做到C#网络通信时,与原有C++开发的服务器通讯获取“客户端请求校时应答”消息包。即:客户端系统时间与服务器的同步时,即从服务器传过来的消息包解析后为time_t类型的。要更改客户端本地时间即将些time_t转换为.net 里的DateTime。下面即为转换的方法

 

ContractedBlock.gifExpandedBlockStart.gifCode
public DateTime Time_tToDateTime (long seconds)
 { 
     
double secs = Convert.ToDouble(seconds); 
     DateTime dt 
= new DateTime(197011000).AddSeconds(secs); 
     
//根据实际情况有可能不同。格林威治标准时间 与北京时间相差要晚8小时 如果出现此情况要加上8小时
     //DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0).AddSeconds(secs)..AddHours(8); 
return dt; 



 

下面是如何进行更改客户端系统时间,调用API函数

先引用命名空间

using System.Runtime.InteropServices;

 

ContractedBlock.gifExpandedBlockStart.gifCode
#region 修改系统时间辅助方法
        [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 void 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;

            SetLocalTime(
ref st);
        } 
        
#endregion

 

在上面两个方法都处理完后,即可对系统时间进行更改。例如在按钮的单击事件中实现此功能即

 

ContractedBlock.gifExpandedBlockStart.gifCode
 private void button1_Click(object sender, EventArgs e)
        {
            
long tick = 1256265735;

            
double secs = Convert.ToDouble(tick);
            SetDate(Time_tToDateTime(secs));
            MessageBox.Show(
"修改成功!");
        }

 

 

转载于:https://www.cnblogs.com/conquer/archive/2009/10/23/1588542.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值