Η έννοια του χρόνου αντιμετωπίζεται στο .NET με το struct DateTime. Υπάρχουν ρουτίνες για τη μετατροπή μεταξύ τοπικής ώρας και UTC. Η αριθμητική μπορεί να γίνει με τη βοήθεια του TimeSpan.
Η κλάση TimeZoneInfo παρέχει ρουτίνες για τον χειρισμό των διαφορών μεταξύ ζωνών ώρας. Η κλάση TimeZoneInfo περιέχει επίσης μεθόδους που διευκολύνουν τον χειρισμό της θερινής ώρας.
Η κλάση CultureInfo υποστηρίζει μορφές ημερομηνίας και ώρας που εξαρτώνται από τις τοπικές ρυθμίσεις.
Για να υποστηρίξεις τον προγραμματισμό σε πολλαπλές πλατφόρμες, η κλάση RuntimeInformation σου επιτρέπει να εντοπίσεις σε ποιο λειτουργικό σύστημα εκτελείται ο κώδικάς σου: Linux, Windows ή OSX.
Σε αυτή την άσκηση επιστρέφεις στον κόσμο των σαλονιών ομορφιάς (που πρωτοεμφανίστηκε στην άσκηση datetimes). Όπως συμβαίνει με αρκετά από τα έργα σου, άλλος ένας πελάτης σου σημείωσε μεγάλη επιτυχία και άνοιξε υποκαταστήματα στο Λονδίνο και το Παρίσι, εκτός από τη βάση του στη Νέα Υόρκη.
Υλοποίησε τη static μέθοδο Appointment.ShowLocalTime() που παίρνει μια ώρα σε UTC και την επιστρέφει ως τοπική ώρα
// For a student in NY
Appointment.ShowLocalTime(new DateTime(2030, 7, 25, 13, 45, 0));
// => {2030, 7, 25, 8, 45, 0}
Τα σαλόνια ομορφιάς είναι υπεύθυνα να κλείνουν μόνα τους τα ραντεβού τους. Η ώρα που δίνεται ως είσοδος είναι τοπική για την τοποθεσία του σαλονιού. Για παράδειγμα, αν κάποιος δηλώσει ώρα 13:45 για ραντεβού στο σαλόνι της Νέας Υόρκης, θα περίμενε ο πελάτης να εμφανιστεί λίγο μετά το μεσημεριανό φαγητό. Παρομοίως, αν κάποιος δήλωνε ώρα 13:45 για το σαλόνι του Λονδίνου, θα περίμενε κι εκεί ο πελάτης να φτάσει λίγο μετά το μεσημεριανό.
Θα σε βοηθήσει να ξέρεις το αναγνωριστικό της ζώνης ώρας για τη Νέα Υόρκη, το Λονδίνο και το Παρίσι.
Σε Mac (OSX) και Linux είναι τα εξής:
Στα Windows είναι:
Υλοποίησε τη static υπερφόρτωση της Appointment.Schedule() που παίρνει μια τοποθεσία και μια συμβολοσειρά ώρας και επιστρέφει την ώρα του ραντεβού σε UTC.
Η υλοποίηση της Schedule() θα πρέπει να επιτρέπει στον κώδικα, μόλις μεταγλωττιστεί, να τρέχει σε Linux, Windows και Mac. Αυτή είναι η πρώτη άσκηση όπου πρέπει να ασχοληθείς με το λειτουργικό σύστημα. Θα χρειαστεί να έχεις ξεχωριστά μονοπάτια κώδικα για να καλύψεις τη διαφορά στα αναγνωριστικά ζώνης ώρας, όπως περιγράφηκε παραπάνω.
Οι συμβολοσειρές ημερομηνίας-ώρας που δίνονται ως είσοδος είναι εγγυημένα έγκυρες.
Appointment.Schedule("7/25/2030 13:45:00", Location.Paris);
// => {2030, 7, 25, 11, 45, 0}
Υλοποίησε τη static Appointment.GetAlertTime() για να παρέχεις ειδοποιήσεις 1 ημέρα (early), 1 ώρα 45 λεπτά (standard) και 30 λεπτά (late) πριν από το ραντεβού.
Appointment.GetAlertTime(new DateTime(2030, 7, 25, 14, 45, 0), AlertLevel.Early);
// => {2030, 7, 24, 14, 45, 0}
Υλοποίησε τη static Appointment.HasDaylightSavingChanged() ώστε να επιστρέφει true αν η θερινή ώρα ενεργοποιήθηκε ή απενεργοποιήθηκε τις τελευταίες 7 ημέρες.
Appointment.HasDaylightSavingChanged(new DateTime(2020, 3, 30, 14, 45, 0), Location.London);
// => true
Για να μπορούν να κλείνονται ραντεβού σε μορφή οικεία στο τοπικό προσωπικό, σου ανατέθηκε να φτιάξεις μια πειραματική ρουτίνα που επιτρέπει την καταχώριση ημερομηνιών και ωρών στην προεπιλεγμένη μορφή της τοποθεσίας του σαλονιού.
Υλοποίησε τη μέθοδο Appointment.NormalizeDateTime() που παίρνει μια καλοσχηματισμένη συμβολοσειρά ημερομηνίας-ώρας σε μορφή κατάλληλη για την τοποθεσία και τη μετατρέπει σε αντικείμενο DateTime. Δε γίνεται καμία προσπάθεια μετατροπής της ημερομηνίας-ώρας σε UTC.
Αν δοθεί λάθος μορφή, τότε θα πρέπει να επιστρέφεται ένα DateTime με τιμή 1/1/1.
Appointment.NormalizeDateTime("25/11/2019 13:45:00", Location.London);
// => {2019, 11, 25, 13, 45, 0}
Appointment.NormalizeDateTime("25/11/2019 13:45:00", Location.NewYork);
// => {1, 1, 1, 0, 0, 0}
Γράψου στο Exercism για να μάθεις και να κατακτήσεις C# με 62 έννοιες178 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.