Διαδρομές
/
C#
C#
/
Ασκήσεις
/
Το σαλόνι ομορφιάς πάει παγκόσμια
Το σαλόνι ομορφιάς πάει παγκόσμια

Το σαλόνι ομορφιάς πάει παγκόσμια

Άσκηση εκμάθησης

Εισαγωγή

Χρόνος

Η έννοια του χρόνου αντιμετωπίζεται στο .NET με το struct DateTime. Υπάρχουν ρουτίνες για τη μετατροπή μεταξύ τοπικής ώρας και UTC. Η αριθμητική μπορεί να γίνει με τη βοήθεια του TimeSpan.

Ζώνη ώρας

Η κλάση TimeZoneInfo παρέχει ρουτίνες για τον χειρισμό των διαφορών μεταξύ ζωνών ώρας. Η κλάση TimeZoneInfo περιέχει επίσης μεθόδους που διευκολύνουν τον χειρισμό της θερινής ώρας.

Η κλάση CultureInfo υποστηρίζει μορφές ημερομηνίας και ώρας που εξαρτώνται από τις τοπικές ρυθμίσεις.

Για να υποστηρίξεις τον προγραμματισμό σε πολλαπλές πλατφόρμες, η κλάση RuntimeInformation σου επιτρέπει να εντοπίσεις σε ποιο λειτουργικό σύστημα εκτελείται ο κώδικάς σου: Linux, Windows ή OSX.

Οδηγίες

Σε αυτή την άσκηση επιστρέφεις στον κόσμο των σαλονιών ομορφιάς (που πρωτοεμφανίστηκε στην άσκηση datetimes). Όπως συμβαίνει με αρκετά από τα έργα σου, άλλος ένας πελάτης σου σημείωσε μεγάλη επιτυχία και άνοιξε υποκαταστήματα στο Λονδίνο και το Παρίσι, εκτός από τη βάση του στη Νέα Υόρκη.

1. Δώσε στους διαχειριστές τις τοπικές ώρες που αντιστοιχούν στα ραντεβού σε UTC (Συντονισμένη Παγκόσμια Ώρα)

Υλοποίησε τη 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}

2. Κλείσε ραντεβού στη Νέα Υόρκη, το Λονδίνο και το Παρίσι

Τα σαλόνια ομορφιάς είναι υπεύθυνα να κλείνουν μόνα τους τα ραντεβού τους. Η ώρα που δίνεται ως είσοδος είναι τοπική για την τοποθεσία του σαλονιού. Για παράδειγμα, αν κάποιος δηλώσει ώρα 13:45 για ραντεβού στο σαλόνι της Νέας Υόρκης, θα περίμενε ο πελάτης να εμφανιστεί λίγο μετά το μεσημεριανό φαγητό. Παρομοίως, αν κάποιος δήλωνε ώρα 13:45 για το σαλόνι του Λονδίνου, θα περίμενε κι εκεί ο πελάτης να φτάσει λίγο μετά το μεσημεριανό.

Θα σε βοηθήσει να ξέρεις το αναγνωριστικό της ζώνης ώρας για τη Νέα Υόρκη, το Λονδίνο και το Παρίσι.

Σε Mac (OSX) και Linux είναι τα εξής:

  • Νέα Υόρκη - America/New_York
  • Λονδίνο - Europe/London
  • Παρίσι - Europe/Paris

Στα Windows είναι:

  • Νέα Υόρκη - Eastern Standard Time
  • Λονδίνο - GMT Standard Time
  • Παρίσι - W. Europe Standard Time

Υλοποίησε τη static υπερφόρτωση της Appointment.Schedule() που παίρνει μια τοποθεσία και μια συμβολοσειρά ώρας και επιστρέφει την ώρα του ραντεβού σε UTC.

Η υλοποίηση της Schedule() θα πρέπει να επιτρέπει στον κώδικα, μόλις μεταγλωττιστεί, να τρέχει σε Linux, Windows και Mac. Αυτή είναι η πρώτη άσκηση όπου πρέπει να ασχοληθείς με το λειτουργικό σύστημα. Θα χρειαστεί να έχεις ξεχωριστά μονοπάτια κώδικα για να καλύψεις τη διαφορά στα αναγνωριστικά ζώνης ώρας, όπως περιγράφηκε παραπάνω.

Οι συμβολοσειρές ημερομηνίας-ώρας που δίνονται ως είσοδος είναι εγγυημένα έγκυρες.

Appointment.Schedule("7/25/2030 13:45:00", Location.Paris);
// => {2030, 7, 25, 11, 45, 0}

3. Δώσε ειδοποιήσεις στους πελάτες σε συγκεκριμένα διαστήματα πριν από το ραντεβού

Υλοποίησε τη 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}

4. Αν η θερινή ώρα άλλαξε πρόσφατα, στέλνουμε μήνυμα υπενθύμισης στους πελάτες.

Υλοποίησε τη static Appointment.HasDaylightSavingChanged() ώστε να επιστρέφει true αν η θερινή ώρα ενεργοποιήθηκε ή απενεργοποιήθηκε τις τελευταίες 7 ημέρες.

Appointment.HasDaylightSavingChanged(new DateTime(2020, 3, 30, 14, 45, 0), Location.London);
// => true

5. Χρησιμοποίησε τη μορφή τοπικής ημερομηνίας και ώρας για την καταχώριση ραντεβού

Για να μπορούν να κλείνονται ραντεβού σε μορφή οικεία στο τοπικό προσωπικό, σου ανατέθηκε να φτιάξεις μια πειραματική ρουτίνα που επιτρέπει την καταχώριση ημερομηνιών και ωρών στην προεπιλεγμένη μορφή της τοποθεσίας του σαλονιού.

Υλοποίησε τη μέθοδο 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}
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
C# Exercism

Έτοιμος να ξεκινήσεις την άσκηση Το σαλόνι ομορφιάς πάει παγκόσμια;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις C# με 62 έννοιες178 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.