Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

SetSysTime

Îåêßíçóå áðü ôï ìÝëïò Vader. Τελευταία δημοσίευση από το μέλος Vader στις 19-09-2007, 18:02. Υπάρχουν 6 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  18-09-2007, 19:55 35106

    SetSysTime

    Δείτε το παρακάτω κομμάτι κώδικα και πείτε μου που κάνω λάθος..Εχω κολήσει πολύ και δεν το βρίσκω !!!

    <DllImport("kernel32.dll", setLastError:=True)> Private Shared Function SetSystemTime(ByRef DateTimeToSet As SystemTime) As Boolean
                                                    End Function
      Private Shared Function SyncTime(ByVal DateTimeToSet As String) As Boolean
        Dim Temp As SystemTime

        If DateTimeToSet.Trim <> "" Then
          Temp.wYear = CType(DateTimeToSet.Trim, DateTime).Year
          Temp.wMonth = CType(DateTimeToSet.Trim, DateTime).Month
          Temp.wDayOfWeek = CType(DateTimeToSet.Trim, DateTime).DayOfWeek
          Temp.wDay = CType(DateTimeToSet.Trim, DateTime).Day
          Temp.wHour = CType(DateTimeToSet.Trim, DateTime).Hour
          Temp.wMinute = CType(DateTimeToSet.Trim, DateTime).Minute
          Temp.wSecond = CType(DateTimeToSet.Trim, DateTime).Second
          Temp.wMilliseconds = CType(DateTimeToSet.Trim, DateTime).Millisecond

          SyncTime = SetSystemTime(Temp)
        End If
      End Function

    Υπόθέστε ότι το DateTimeToSet έχει σωστή ώρα μέσα !!!
     

    Εμ ..Μου κάνει set την ώρα αλλά μου βάζει τα δευτερόλεπτα για ώρα .....
    Τι λάθος κάνω ..?
  •  18-09-2007, 20:03 35107 σε απάντηση της 35106

    Απ: SetSysTime

    Κάνε ένα cast όλο το DateTimeToSet σε DateTime object type και πάρε τις τιμές απο εκεί μια-μια. Μην κάνεις cast κάθε φορά. Δεν ξέρω εάν παίζει ρόλο, γενικά σαν συμβουλή στο λέω.
    Παναγιώτης Κεφαλίδης

    "Για να επιτύχεις, θα πρέπει το πάθος σου για την επιτυχία να είναι μεγαλύτερο απο τον φόβο σου για την αποτυχία"

    Οι απαντήσεις παρέχονται για συγκεκριμένες ερωτήσεις και χωρίς καμιά εγγύηση. Παρακαλώ διαβάστε τους όρους χρήσης.
  •  18-09-2007, 22:36 35110 σε απάντηση της 35107

    Απ: SetSysTime

    Επίσης, θα πρέπει να έχεις υπόψη ότι η SetSystemTime χρησιμοποιεί UTC time, οπότε η ώρα που θα δεις στο ρολόι του υπολογιστή σου θα είναι αυτή που έδωσες +2/3 ώρες (ανάλογα με το αν έχουμε θερινή ώρα)


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  19-09-2007, 09:33 35133 σε απάντηση της 35110

    Απ: SetSysTime

    Δεν έχει κανένα πρόβλημα με το γεγονός ότι κάνω πολλά CTYPE...

    Παναγιώτη έτσι ακριβώς συμβαίνει..Εχει απλά 2-3 ώρες διαφορά. Πως θα του ορίσω ότι η ώρα που έχω δεν έιναι UTC..? AutoDetect δεν έχει ..? Και αν δεν γίνεται πως αλλίως μπορώ να πειράξω την ώρα ..?
  •  19-09-2007, 09:42 35134 σε απάντηση της 35133

    Απ: SetSysTime

    Την λύση την βρίκα τελικά..Αντί για την SetSystemTime έβαλα την SetLocalTime και τρέχει κανονικά...Μια χαρά όλα !!
  •  19-09-2007, 10:01 35135 σε απάντηση της 35133

    Απ: SetSysTime

    Το πρόβλημα με τα επαναλαμβανόμενα CType είναι ότι ξοδεύεις συνέχεια χρόνο για να κάνεις parse το string, δημιουργείς 8-9 περιττά temporary strings με την Trim, δεν έχεις καμμία εξασφάλιση ότι θα πετύχει (ποιό είναι το format που καταλαβαίνει η CType?) και κάνεις και τον κώδικα άσχημο και δυσανάγνωστο. Καλύτερα να χρησιμοποιήσεις την DateTime.Parse ή την DateTime.TryParse για να μετατρέψεις το string μία φορά σε DateTime και να το χρησιμοποιήσεις μετά. Μπορείς επίσης να ορίσεις ακριβώς το format που περιμένεις να έχει το string που θα κάνεις parse.

    Από εκεί και πέρα, η SetSystemTime εξ ορισμού περιμένει UTC, οπότε τί autodetection να έχει? Για να δώσεις local time ή θα μετατρέψεις την μεταβλητή DateTime με την  DateTime.ToLocalTime ή θα χρησιμοποιήσεις την SetLocalTime η οποία περιμένει local time. Κοίτα πάντως και το documentation για τις μεταβλητές που περνάς. Θα δεις για παράδειγμα ότι το πεδίο DayOfWeek αγνοείται και από τις δύο συναρτήσεις, ενώ όλα τα πεδία του SYSTEMTIME είναι 16 bit unsigned. Όχι ότι αυτό δημιουργεί το πρόβλημα, αλλά στο παρασκήνιο η VB κάνει αυτή την μετατροπή χωρίς να το ξέρεις.

    Τέλος, βεβαιώσου ότι το string που περνάς είναι σωστό. Μπορεί ένα λάθος στον κώδικα που δημιουργεί το string να προκαλεί το πρόβλημα.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  19-09-2007, 18:02 35153 σε απάντηση της 35135

    Απ: SetSysTime

    Καλά...Καλά..Ευχαριστώ Smile Πάντως δουλεύει χωρίς πρόβλημα.
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems