اريد الحصول على تاريخ اليوم عن طريق الانترنت وليس عن طريق الجهاز - ali.alfoly - 23-08-13
السلام عليكم
اريد الحصول على الوقت والتاريخ عن طريق الانترنت لضبط وقت وتاريخ الكمبيوتر
كيف يتم ذلك وجزاكم الله خيرا
اريد الحصول على تاريخ اليوم عن طريق الانترنت وليس عن طريق الجهاز - الشاكي لله - 23-08-13
اولا يجب ان تحدد سيرفر تعتمد عليه
يعني بالاحرى . حدد موقع يمكنك اخذ التاريخ منه
مثلا هذا الموقع
http://nist.time.gov/timezone.cgi?UTC/s/0
يعرض لك الوقت حسب توقيت الولايات المتحدة
بعده ان تحدد الموقع الذي تريد سحب الوقت منه
قم باستخدام الطلبات Web Requser
وسبق ان وضعت مقالة حول ذلك في قسم مقالات سي شارب
ثم بعد ان يتم ارسال الرد على طلبك
قم بتحليل الرد واخراج الوقت
ثم استعمال دالة API لتعديل وقت جهازك
PHP كود :
<StructLayout(LayoutKind.Sequential)> _ Public Structure SYSTEMTIME Public wYear As Short Public wMonth As Short Public wDayOfWeek As Short Public wDay As Short Public wHour As Short Public wMinute As Short Public wSecond As Short Public wMilliseconds As Short End Structure <DllImport("kernel32.dll", SetLastError := True)> _ Public Shared Function SetSystemTime(ByRef theDateTime As SYSTEMTIME) As Boolean End Function
اريد الحصول على تاريخ اليوم عن طريق الانترنت وليس عن طريق الجهاز - MSDOS - 23-08-13
الشاكي لله كتب :اولا يجب ان تحدد سيرفر تعتمد عليه
يعني بالاحرى . حدد موقع يمكنك اخذ التاريخ منه
مثلا هذا الموقع
http://nist.time.gov/timezone.cgi?utc/s/0
يعرض لك الوقت حسب توقيت الولايات المتحدة
بعده ان تحدد الموقع الذي تريد سحب الوقت منه
قم باستخدام الطلبات web requser
وسبق ان وضعت مقالة حول ذلك في قسم مقالات سي شارب
ثم بعد ان يتم ارسال الرد على طلبك
قم بتحليل الرد واخراج الوقت
ثم استعمال دالة api لتعديل وقت جهازك
PHP كود :
<structlayout(layoutkind.sequential)> _ public structure systemtime public wyear as short public wmonth as short public wdayofweek as short public wday as short public whour as short public wminute as short public wsecond as short public wmilliseconds as short end structure <dllimport("kernel32.dll", setlasterror := true)> _ public shared function setsystemtime(byref thedatetime as systemtime) as boolean end function
شكراً و أعجبني للمشاركة
شكراً شكر هذه المشاركة msdos
أعجبني معجب بهذه المشاركة msdos
اريد الحصول على تاريخ اليوم عن طريق الانترنت وليس عن طريق الجهاز - MSDOS - 23-08-13
أيضاُ
وجدت لك الدالة GetFastestNISTDate وكما يدل اسمها Fastest الأسرع
كود :
Public Function GetFastestNISTDate() As DateTime
Dim result = DateTime.MinValue
' Initialize the list of NIST time servers
' http://tf.nist.gov/tf-cgi/servers.cgi
Dim servers As String() = New String() {"nist1-ny.ustiming.org", "nist1-nj.ustiming.org", "nist1-pa.ustiming.org", "time-a.nist.gov", "time-b.nist.gov", "nist1.aol-va.symmetricom.com", _
"nist1.columbiacountyga.gov", "nist1-chi.ustiming.org", "nist.expertsmi.com", "nist.netservicesgroup.com"}
' Try 5 servers in random order to spread the load
Dim rnd As New Random()
For Each server As String In servers.OrderBy(Function(s) rnd.NextDouble()).Take(5)
Try
' Connect to the server (at port 13) and get the response
Dim serverResponse As String = String.Empty
Using reader = New IO.StreamReader(New System.Net.Sockets.TcpClient(server, 13).GetStream())
serverResponse = reader.ReadToEnd()
End Using
' If a response was received
If Not String.IsNullOrEmpty(serverResponse) Then
' Split the response string ("55596 11-02-14 13:54:11 00 0 0 478.1 UTC(NIST) *")
Dim tokens As String() = serverResponse.Split(" "c)
' Check the number of tokens
If tokens.Length >= 6 Then
' Check the health status
Dim health As String = tokens(5)
If health = "0" Then
' Get date and time parts from the server response
Dim dateParts As String() = tokens(1).Split("-"c)
Dim timeParts As String() = tokens(2).Split(":"c)
' Create a DateTime instance
Dim utcDateTime As New DateTime(Convert.ToInt32(dateParts(0)) + 2000, Convert.ToInt32(dateParts(1)), Convert.ToInt32(dateParts(2)), Convert.ToInt32(timeParts(0)), Convert.ToInt32(timeParts(1)), Convert.ToInt32(timeParts(2)))
' Response successfully received; exit the loop
Return result
End If
End If
End If
' Ignore exception and try the next server
Catch
End Try
Next
Return result
End Function
اريد الحصول على تاريخ اليوم عن طريق الانترنت وليس عن طريق الجهاز - MSDOS - 23-08-13
طريقة استعمال الدالة GetFastestNISTDate
كود :
' بالتوقيت العالمي
TextBox1.Text = GetFastestNISTDate()
' لتحويل التوقيت العالمي لفارق التوقبت لمنطقتك
TextBox1.Text = GetFastestNISTDate().ToLocalTime()
اريد الحصول على تاريخ اليوم عن طريق الانترنت وليس عن طريق الجهاز - MSDOS - 23-08-13
وهذه الدالة قمت باختصارها وتحسينها
كود :
Public Function GetInternetTime(ByVal host As String, Optional ByVal ToLocalTime As Boolean = False) As DateTime
Dim timeStr As String
Dim reader As New IO.StreamReader(New Net.Sockets.TcpClient(host, 13).GetStream)
Dim LastSysTime As DateTime
LastSysTime = DateTime.UtcNow()
timeStr = reader.ReadToEnd
reader.Close()
Dim year As Integer = CInt(timeStr.Substring(7, 2)) + 2000
Dim month As Integer = CInt(timeStr.Substring(10, 2))
Dim day As Integer = CInt(timeStr.Substring(13, 2))
Dim hour As Integer = CInt(timeStr.Substring(16, 2))
Dim minute As Integer = CInt(timeStr.Substring(19, 2))
Dim second As Integer = CInt(timeStr.Substring(22, 2))
If ToLocalTime Then
Return New DateTime(year, month, day, hour, minute, second).ToLocalTime
Else
Return New DateTime(year, month, day, hour, minute, second)
End If
End Function
اريد الحصول على تاريخ اليوم عن طريق الانترنت وليس عن طريق الجهاز - MSDOS - 23-08-13
طريقة استعمال الدالة GetInternetTime
كود :
' بالتوقيت العالمي
TextBox1.Text = GetInternetTime("time.nist.gov")
' لتحويل التوقيت العالمي لفارق التوقبت لمنطقتك
TextBox1.Text = GetInternetTime("time.nist.gov", True)
اريد الحصول على تاريخ اليوم عن طريق الانترنت وليس عن طريق الجهاز - MSDOS - 23-08-13
ملاحظة هامة:
قد تتأخر كثيراً الاستجابة في أوقات مختلفة وذلك من كل مواقع توقيت النت، حتى أنك تشعر في بعض الأحيان ان الدالة غير صحيحة وهي ليست كذلك (لا أدري ما السبب).
اريد الحصول على تاريخ اليوم عن طريق الانترنت وليس عن طريق الجهاز - MSDOS - 23-08-13
هذه بعض مواقع التوقيت التي تعمل حتى الآن
كود :
TextBox1.Text = GetInternetTime("time-a.timefreq.bldrdoc.gov")'132.163.4.101
TextBox1.Text = GetInternetTime("time-c.timefreq.bldrdoc.gov") '132.163.4.103
TextBox1.Text = GetInternetTime("utcnist.colorado.edu") '128.138.140.44
TextBox1.Text = GetInternetTime("time-d.nist.gov") '129.6.15.27
TextBox1.Text = GetInternetTime("time.nist.gov") '129.6.15.29
اريد الحصول على تاريخ اليوم عن طريق الانترنت وليس عن طريق الجهاز - الشاكي لله - 23-08-13
طريقة اخرى اخي العزيز ....
بدل من الاعتماد على موقع خاص
يمكننا تصميم خدمة ويب (web service)
وفي خدمة الويب نسوي دالة تقوم بحساب الوقت والتاريخ على سيرفر (قم بتركيبها على استضافة)
ثم من برنامجنا نقوم بسحب التاريخ والوقت بسهوووولة وبدون request و response وبدون تحليلات وخرابيط
فقط نقوم باستدعاء دالة جلب الوقت من الخدمة الي سويناها << بسيط صح !!
-
اصلا مافي ضمان على هالمواقع الذي ذكرها اخوي MSDOS
ماذا لو تم اغلاقها . هل سيتعطل برنامجك ؟؟؟ < اكيد
ماذا لو تم تغير سكربت الموقع ولم يكن باستطاعتك قراءة الوقت ؟؟ هل ستقوم بتنزيل ابديت لبرنامجك لحل هذه المشكلة !!
لماذا لانسهل الامور ونستخدم الطرق الصحيحة!
الطريق الصحيح والاحترافي هو باستعمال Web Service وهي التقنية التي بدت تسخدمها اغلب التطبيقات
انتظروني في مقالة كاملة تتحدث عنها قريبا
ضمن [سلسلة التعامل مع الويب] ومضاف لها التحكم الخارجي
|