Exercise

in #ita2 months ago

using System;

using System.Globalization;

using System.Runtime.InteropServices;

public enum Location{

NewYork,

London,

Paris

}

public enum AlertLevel{

Early,

Standard,

Late

}

public static class Appointment{

private static bool isWindows = OperatingSystem.IsWindows();

public static DateTime ShowLocalTime(DateTime dtUtc) => dtUtc.ToLocalTime();

public static DateTime Schedule(string appointmentDateDescription, Location location){

            DateTime localDateTimeIn = DateTime.Parse(appointmentDateDescription);

            var timeZoneID = GetTimeZoneID(location);

            var timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneID);

            return TimeZoneInfo.ConvertTimeToUtc(localDateTimeIn, timeZone);

}

    



private static string GetTimeZoneID(Location location) => location switch {

    Location.NewYork => isWindows ? "Eastern Standard Time" : "America/New\_York",

    Location.London => isWindows ? "GMT Standard Time" : "Europe/London",

    Location.Paris => isWindows ? "W. Europe Standard Time" : "Europe/Paris",

    \_ => throw new ArgumentOutOfRangeException(),

};

public static DateTime GetAlertTime(DateTime appointment, AlertLevel alertLevel){

    if(alertLevel == AlertLevel.Early){

        return appointment.AddDays(-1);

    }

    else if(alertLevel == AlertLevel.Standard){

        return appointment.AddHours(-1).AddMinutes(-45);

    }

    return appointment.AddMinutes(-30);

}

public static bool HasDaylightSavingChanged(DateTime dt, Location location){

   var timeZoneID = GetTimeZoneID(location);

   var timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneID);

   return timeZone.IsDaylightSavingTime(dt.AddDays(-7)) != timeZone.IsDaylightSavingTime(dt);

}

public static DateTime NormalizeDateTime(string dtStr, Location location){

    CultureInfo culture = CultureInfo.CreateSpecificCulture(location switch{

            Location.NewYork =>"en-US",

            Location.London => "en-GB",

            Location.Paris => "fr-FR",

            \_ => throw new ArgumentException()

    });

        return DateTime.TryParse(dtStr, culture, DateTimeStyles.None, out DateTime localDateTimeIn)? localDateTimeIn : new DateTime();

        

}

}

Sort:  

Thank you for your witness vote!
Have a !BEER on me!
To Opt-Out of my witness beer program just comment STOP below


Hey @drago18121996, here is a little bit of BEER from @isnochys for you. Enjoy it!

Learn how to earn FREE BEER each day by staking your BEER.