// ========================================================================
//
// Copyright (C) 2016-2017 MARC CHEVALDONNE
//                         marc.chevaldonne.free.fr
//
// Module        : Program.cs
// Author        : Marc Chevaldonné
// Creation date : 2016-09-22
//
// ========================================================================

using System;
using static System.Console;

namespace ex_004_006_TimeSpan_et_DateTime
{
    class Program
    {
        static void Main(string[] args)
        {
            OutputEncoding = System.Text.Encoding.UTF8;

            //TimeSpan
            //construction d'une durée à partir d'un constructeur
            TimeSpan durée_d_un_cours = new TimeSpan(1, 50, 00);
            //construction d'une durée à partir d'un nombre de minutes (ou heures, ou secondes...)
            TimeSpan retard = TimeSpan.FromMinutes(21.20);
            //opération (addition, soustraction) de durées
            TimeSpan durée_du_cours_aujourd_hui = durée_d_un_cours + retard;
            //durée nulle
            TimeSpan durée_nulle = TimeSpan.Zero;
            //affichage d'une durée
            WriteLine($"Le cours d'aujourd'hui est de {durée_d_un_cours} + {retard} de retard = {durée_du_cours_aujourd_hui}");
            WriteLine();

            //DateTime
            //construction d'un DateTime
            DateTime débutDeJazzEnTete2012 = new DateTime(2012, 10, 23, 20, 00, 00);
            DateTime finDeJazzEnTete2012 = new DateTime(2012, 10, 27, 23, 59, 00);
            //soustraction de DateTime
            TimeSpan duréeDeJazzEnTete2012 = finDeJazzEnTete2012.Subtract(débutDeJazzEnTete2012);
            //affichage de DateTime
            WriteLine($"Le festival jazz en tête a duré : {duréeDeJazzEnTete2012}");
            WriteLine($"Le festival jazz en tête a duré : {duréeDeJazzEnTete2012.Days} jours et {duréeDeJazzEnTete2012.Hours} heures");
            WriteLine($"Le festival jazz en tête a duré : {duréeDeJazzEnTete2012.Days} jours et {Math.Round(duréeDeJazzEnTete2012.TotalHours - (duréeDeJazzEnTete2012.Days * 24))} heures");
            //on peut ajouter ou soustraire du temps à 1 DateTime
            DateTime débutDernierConcert = finDeJazzEnTete2012 - TimeSpan.FromHours(4);
            //autre solution équivalente
            débutDernierConcert = finDeJazzEnTete2012.Subtract(TimeSpan.FromHours(4));
            WriteLine($"Le dernier concert de Jazz en Tete commence le : {débutDernierConcert.ToString("dd/MM/yyy")} à {débutDernierConcert.ToString("hh:mm")}");

            WriteLine();

            //gestion des décalages horaires
            DateTime début_de_la_finale_de_l_USOpen = new DateTime(2010, 09, 13, 20, 00, 00, DateTimeKind.Utc);
            WriteLine($"La finale commencera : {début_de_la_finale_de_l_USOpen.ToLocalTime().ToString("f")} chez nous");
            WriteLine($"La finale commencera : {(début_de_la_finale_de_l_USOpen - TimeSpan.FromHours(4)).ToString("g")} à New York");
            WriteLine();

            //on peut parser une chaîne de caractères !
            string date_réjouissances = "jeudi 29 septembre 2011 13:30";
            WriteLine("Convertir jeudi 29 septembre 2011 13:30 en DateTime ? oui bien sûr !");
            DateTime réjouissances = DateTime.Parse(date_réjouissances);
            WriteLine(réjouissances);

            //la date et l'heure actuelles (au moment de l'exécution de la ligne)
            //est donnée par :
            DateTime maintenant = DateTime.Now;
            WriteLine($"Maintenant : {maintenant}");
        }
    }
}
