سلام
من می خوام ساعت رو از جایی که کاملاً مطمئن هست و هیچ کس نمی تواند آن را تغییر دهم بدست آورم.
از کجا باید این ساعت را بگیرم؟
با تشکر
Printable View
سلام
من می خوام ساعت رو از جایی که کاملاً مطمئن هست و هیچ کس نمی تواند آن را تغییر دهم بدست آورم.
از کجا باید این ساعت را بگیرم؟
با تشکر
بايد از سرور هايي كه ساعت و تاريخو ميدن بگيري و به ساعت محلي تبديل كني تهران +3:30
http://stackoverflow.com/questions/1...server-using-c
من کدارو متوجه نمیشم تا به اون چیزی که می خوام برسم.
1- اون 3:30+ رو کجا باید بزنم؟ الان همین لینکی که شما دادید رو اجرا کردم ساعت درست رو بهم داد.
2- من می خوام ساعت مثلاً 14:25:26 باشه که می دونم باید اینجوری بنویسم datetime.now.tostring(HH:mm:ss) ولی نمی دونم این رو کجا باید بذارم.
3- قسمتی که تاریخ رو می ده کدام قسمتش هست چون می خوام به شمسی تبدیلش کنم. البته می تونم جواب رو split کنم و تاریخ رو دربیارم و به شمسی تبدیلش کنم ولی می خوام بدونم کدوم قسمت کد برای تاریخ هستش.
با تشکر
جواب کد پایین اینه:
12/5/2013 10:58:15 AM
public static DateTime GetNetworkTime()
{
//default Windows time server
const string ntpServer = "time.windows.com";
// NTP message size - 16 bytes of the digest (RFC 2030)
var ntpData = new byte[48];
//Setting the Leap Indicator, Version Number and Mode values
ntpData[0] = 0x1B; //LI = 0 (no warning), VN = 3 (IPv4 only), Mode = 3 (Client Mode)
var addresses = System.Net.Dns.GetHostEntry(ntpServer).AddressList ;
//The UDP port number assigned to NTP is 123
var ipEndPoint = new System.Net.IPEndPoint(addresses[0], 123);
//NTP uses UDP
var socket = new System.Net.Sockets.Socket(System.Net.Sockets.Addre ssFamily.InterNetwork, System.Net.Sockets.SocketType.Dgram, System.Net.Sockets.ProtocolType.Udp);
socket.Connect(ipEndPoint);
socket.Send(ntpData);
socket.Receive(ntpData);
socket.Close();
//Offset to get to the "Transmit Timestamp" field (time at which the reply
//departed the server for the client, in 64-bit timestamp format."
const byte serverReplyTime = 40;
//Get the seconds part
ulong intPart = BitConverter.ToUInt32(ntpData, serverReplyTime);
//Get the seconds fraction
ulong fractPart = BitConverter.ToUInt32(ntpData, serverReplyTime + 4);
//Convert From big-endian to little-endian
intPart = SwapEndianness(intPart);
fractPart = SwapEndianness(fractPart);
var milliseconds = (intPart * 1000) + ((fractPart * 1000) / 0x100000000L);
//**UTC** time
var networkDateTime = (new DateTime(1900, 1, 1, 0, 0, 0, DateTimeKind.Utc)).AddMilliseconds((long)milliseco nds);
return networkDateTime.ToLocalTime();
}
// stackoverflow.com/a/3294698/162671
static uint SwapEndianness(ulong x)
{
return (uint)(((x & 0x000000ff) << 24) +
((x & 0x0000ff00) << 8) +
((x & 0x00ff0000) >> 8) +
((x & 0xff000000) >> 24));
}