private DateTimeOffset CalcLocalTime(FlightTime flightTime, AirportModel arrivingAt, DateTimeOffset departDate) { DateTimeOffset arrivalTime = departDate.Add(flightTime.Duration); TimeZoneInfo timeZoneInfo = ContosoTravel.Web.Application.Extensions.TimeZoneHelper.FindSystemTimeZoneById(arrivingAt.TimeZone); if (timeZoneInfo.IsDaylightSavingTime(arrivalTime)) { arrivalTime = arrivalTime.AddHours(1); } return(TimeZoneInfo.ConvertTime(arrivalTime.DateTime, timeZoneInfo)); }
public async Task <IEnumerable <FlightModel> > GetAll(CancellationToken cancellationToken) { Random random = new Random(); List <FlightModel> allFlights = new List <FlightModel>(); foreach (var flightTime in FlightTime.GetAll()) { var departingFrom = await _airportDataProvider.FindByCode(flightTime.DepartingFrom, CancellationToken.None); var arrivingAt = await _airportDataProvider.FindByCode(flightTime.ArrivingAt, CancellationToken.None); for (int dayOffset = -1; dayOffset < 7; dayOffset++) { int numberOfFlights = random.Next(3, 5); DateTime today = DateTime.Now.Date.AddDays(dayOffset); TimeZoneInfo departingTimeZone = ContosoTravel.Web.Application.Extensions.TimeZoneHelper.FindSystemTimeZoneById(departingFrom.TimeZone); for (int ii = 0; ii < numberOfFlights; ii++) { int minutesToAddToFiveAm = (int)(random.NextDouble() * 19d * 60d); DateTimeOffset departDate = DateTimeOffset.Parse($"{today.ToString("MM/dd/yyyy")} 5:00 AM {departingTimeZone.BaseUtcOffset.Hours.ToString("00")}:{departingTimeZone.BaseUtcOffset.Minutes.ToString("00")}").AddMinutes(minutesToAddToFiveAm); if (departingTimeZone.IsDaylightSavingTime(today)) { departDate = departDate.AddHours(1); } allFlights.Add(new FlightModel() { DepartingFromAiport = departingFrom, DepartingFrom = flightTime.DepartingFrom, ArrivingAtAiport = arrivingAt, ArrivingAt = flightTime.ArrivingAt, Duration = flightTime.Duration, DepartureTime = departDate, Cost = 1500d * random.NextDouble(), ArrivalTime = CalcLocalTime(flightTime, arrivingAt, departDate) }); } } } return(allFlights); }