データベースでは、日付は次の形式で保存されます。
year-month-day hour:minute:second:msecond
アプリケーション ユーザーは、グリッドをフィルター処理し、フィルター列に次のように記述できます
08-11
。次のコードがあります。
var test = DateTime.Parse(filter.SearchingValue);
test
変数には が含まれています11.08.2012
。しかし、私は取得したい08.11.2012
。
データベースでは、日付は次の形式で保存されます。
year-month-day hour:minute:second:msecond
アプリケーション ユーザーは、グリッドをフィルター処理し、フィルター列に次のように記述できます
08-11
。次のコードがあります。
var test = DateTime.Parse(filter.SearchingValue);
test
変数には が含まれています11.08.2012
。しかし、私は取得したい08.11.2012
。
使用できますDateTime.ParseExact
:
string value = string.Format("{0}-{1}"
, filter.SearchingValue
, DateTime.Today.Year);
DateTime dt = DateTime.ParseExact(value, "dd-MM-yyyy", CultureInfo.InvariantCulture);
はい。ただし、ユーザーは日付をドットで分割することもできます: 08.11. その他の例: 08.11.12、08.11、08-11、08-11-12。
たぶんもっと簡単なことがありますが、これはうまくいきます:
// sample input
var inputs = new string[] { "08.11.12", "08.11", "08-11", "08-11-12" };
// possible formats
var formats = new string[] { "dd-MM-yyyy", "dd.MM.yyyy" };
// try to parse all your sample data
for (int i = 0; i < inputs.Length; i++)
{
string input = inputs[i];
var tokens = input.Split(new[] { '-', '.' }, StringSplitOptions.RemoveEmptyEntries);
if (tokens.Length == 2)
{
input = string.Format("{0}-{1}"
, input
, DateTime.Today.Year);
}
else if (tokens.Length == 3)
{
string year = tokens[2];
if (year.Length != 4)
{
year = string.Format("{0:20##}", int.Parse(year));
}
input = string.Format("{0}-{1}-{2}"
, tokens[0]
, tokens[1]
, year);
}
else
throw new ArgumentException("Invalid DateTime", "filter.SearchingValue");
DateTime dt = DateTime.MinValue;
foreach (string format in formats)
{
bool success = DateTime.TryParseExact(
input
, format
, CultureInfo.InvariantCulture
, DateTimeStyles.None
, out dt);
if (success) break;
}
Console.WriteLine(dt.ToString());
}
デフォルトの日付形式は、system.webのWeb構成で設定できます。
<globalization uiCulture="en-GB" culture="en-GB" />
var ftest = test.ToString("dd.MM.yyyy")