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!