Stringhe di formato di data e ora personalizzato
Stringhe di formato di data e ora personalizzato

MICROSOFT VISUAL STUDIO: Formattare e gestire le date in C#

Programmazione - Visual Studio Visite: 6140

Qualunque sia il linguaggio di programmazione che state usando, prima o poi questa domanda ve la dovrete fare.

Come si formatta una data?

Vedremo come passare una data ad una Stored Procedure Oracle.

Vedremo i separatori delle ore e vari esempi di parse.

Come formattare le date nullable?

 

 

Con i linguaggi Made in Microsoft la migliore guida su come formattare una data la trovate qui:

Stringhe di formato DateTime personalizzato

 

Un'altra utilissima guida sull'uso del time separator la trovate invece qui.

 

DATA ATTUALE

Ad esempio nel linguaggio C# se si vuole la data attuale nel formato aammgg si può usare:

 

DateTime.Now.ToString("yyMMdd")

 

yy: anno a due cifre

MM: mese a due cifre

dd: giorno a due cifre

 

DA DATA A STRING

Particolare attenzione la si deve porre al separatore delle ore che si prende quello attuale definito nel sistema.

Avendo un sistema con il punto come separatore delle ore, scrivendo:

 

DateTime ora = DateTime.Now;
System.Globalization.CultureInfo myCultureinfo = new System.Globalization.CultureInfo("it-IT");
string dataStr = String.Format(myCultureinfo, "{0:yyyy-MM-ddTHH:mm:sszzz}", ora);

 

 

non si ottiene un'ora separata con i ':', come indicato nel format, ma con il '.' come nel sistema.

Con la parte relativa alla data invece nessun problema.

Se si vogliono i ':' si deve fare:

 

DateTime ora = DateTime.Now;
System.Globalization.CultureInfo myCultureinfo = new System.Globalization.CultureInfo("it-IT");
DateTimeFormatInfo dtfi = myCultureinfo.DateTimeFormat;
dtfi.TimeSeparator = ":";
string dataStr = String.Format(myCultureinfo, "{0:yyyy-MM-ddTHH:mm:sszzz}", ora);

 

Ovvero si forza il TimeSeparator ad avere il valore che vogliamo noi.

Un'altra soluzione è la seguente:

 

DateTime ora = DateTime.Now;
string dataStr = String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0:yyyy-MM-ddTHH:mm:sszzz}", ora);

Si utilizza la proprietà InvarianCulture che non tiene conto dell'impostazione corrente.

 

DA STRING A DATA

E se abbiamo una string e si vuole avere un oggetto DateTime?

 

try
{
    //Si prova la conversione con il metodo standard
    string miaData_str = "...";
    DateTime miaData = DateTime.Parse(miaData_str);
}catch(Exception e)
{
    //Possibili formati
    string[] formats = { "dd.M.yy HH.mm.ss", "dd.MM.yy HH.mm.ss" };
    DateTime testParsedDate;
    if (DateTime.TryParseExact(miaData_str,
            formats, System.Globalization.CultureInfo.InvariantCulture,
            System.Globalization.DateTimeStyles.None, out testParsedDate))
        {//Parse riuscito: data corretta}
    else
       { throw new Exception("Errore trovato nel formato della data " + miaData_str, e);}
}

 

DATE IN STORED PROCEDURE ORACLE

Come fare se bisogna passare una data come parametro di ingresso di una stored procedure Oracle?

Ecco il miglior modo per farlo:

 

public static OracleDate CheckDateOracle(DateTime? dt)
{
    if (!dt.HasValue || dt == DateTime.MinValue)
    {
        return OracleDate.Null;
    }
    else
    {
        return new OracleDate(dt.Value);
    }
}

 

In questa maniera non si hanno problemi nel formato passato.

 

Nullable Date ToString format

Come formattare una stringa nullable?

 

DateTime? myDate = .....;

string myDateStr = (myDate.HasValue ? myDate.Value.ToString("dd.MM.yyyy HH:mm") : " ");

 

 

Buon lavoro!