Το πρόβλημα με τα επαναλαμβανόμενα 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