using System;
class Program
{
static void Main()
{
var p = new Product()
{
Code = "A123456",
Name = "hogehoge"
};
Console.WriteLine(p.ToString("%y年%m月%d日 - %c - %n"));
Console.ReadKey();
}
}
class Product : IFormattable
{
public string Code { get; set; }
public string Name { get; set; }
// Object.ToStringのオーバーライド
public override string ToString()
{
// 書式と書式プロバイダを指定せずにToStringを呼ぶ
return ToString("", null);
}
public string ToString(string format)
{
// 書式プロバイダを指定せずにToStringを呼ぶ
return ToString(format, null);
}
public string ToString(string format, IFormatProvider formatProvider)
{
var isEscape = false;
var result = "";
foreach (var f in format)
{
switch (f)
{
case '%':
isEscape = true;
continue;
case 'c':
if (isEscape)
result += Code;
else
result += f;
break;
case 'n':
if (isEscape)
result += Name;
else
result += f;
break;
case 'y':
if (isEscape)
result += DateTime.Now.ToString("yyyy");
else
result += f;
break;
case 'm':
if (isEscape)
result += DateTime.Now.ToString("MM");
else
result += f;
break;
case 'd':
if (isEscape)
result += DateTime.Now.ToString("dd");
else
result += f;
break;
default:
result += f;
break;
}
isEscape = false;
}
return result;
}
}
dXNpbmcgU3lzdGVtOwoKY2xhc3MgUHJvZ3JhbQogICAgewogICAgICAgIHN0YXRpYyB2b2lkIE1haW4oKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIHAgPSBuZXcgUHJvZHVjdCgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIENvZGUgPSAiQTEyMzQ1NiIsCiAgICAgICAgICAgICAgICBOYW1lID0gImhvZ2Vob2dlIgogICAgICAgICAgICB9OwogICAgICAgICAgICBDb25zb2xlLldyaXRlTGluZShwLlRvU3RyaW5nKCIleeW5tCVt5pyIJWTml6UgLSAlYyAtICVuIikpOwoKICAgICAgICAgICAgQ29uc29sZS5SZWFkS2V5KCk7CiAgICAgICAgfQogICAgCQogICAgfQogICAgY2xhc3MgUHJvZHVjdCA6IElGb3JtYXR0YWJsZQogICAgewogICAgICAgIHB1YmxpYyBzdHJpbmcgQ29kZSB7IGdldDsgc2V0OyB9CiAgICAgICAgcHVibGljIHN0cmluZyBOYW1lIHsgZ2V0OyBzZXQ7IH0KCiAgICAgICAgLy8gT2JqZWN0LlRvU3RyaW5n44Gu44Kq44O844OQ44O844Op44Kk44OJCiAgICAgICAgcHVibGljIG92ZXJyaWRlIHN0cmluZyBUb1N0cmluZygpCiAgICAgICAgewogICAgICAgICAgICAvLyDmm7jlvI/jgajmm7jlvI/jg5fjg63jg5DjgqTjg4DjgpLmjIflrprjgZvjgZrjgatUb1N0cmluZ+OCkuWRvOOBtgogICAgICAgICAgICByZXR1cm4gVG9TdHJpbmcoIiIsIG51bGwpOwogICAgICAgIH0KCiAgICAgICAgcHVibGljIHN0cmluZyBUb1N0cmluZyhzdHJpbmcgZm9ybWF0KQogICAgICAgIHsKICAgICAgICAgICAgLy8g5pu45byP44OX44Ot44OQ44Kk44OA44KS5oyH5a6a44Gb44Ga44GrVG9TdHJpbmfjgpLlkbzjgbYKICAgICAgICAgICAgcmV0dXJuIFRvU3RyaW5nKGZvcm1hdCwgbnVsbCk7CiAgICAgICAgfQoKICAgICAgICBwdWJsaWMgc3RyaW5nIFRvU3RyaW5nKHN0cmluZyBmb3JtYXQsIElGb3JtYXRQcm92aWRlciBmb3JtYXRQcm92aWRlcikKICAgICAgICB7CiAgICAgICAgICAgIHZhciBpc0VzY2FwZSA9IGZhbHNlOwogICAgICAgICAgICB2YXIgcmVzdWx0ID0gIiI7CiAgICAgICAgICAgIGZvcmVhY2ggKHZhciBmIGluIGZvcm1hdCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgc3dpdGNoIChmKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJyUnOgogICAgICAgICAgICAgICAgICAgICAgICBpc0VzY2FwZSA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFc2NhcGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gQ29kZTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGY7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFc2NhcGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gTmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGY7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3knOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFc2NhcGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gRGF0ZVRpbWUuTm93LlRvU3RyaW5nKCJ5eXl5Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlICdtJzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzRXNjYXBlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IERhdGVUaW1lLk5vdy5Ub1N0cmluZygiTU0iKTsKICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGY7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNFc2NhcGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gRGF0ZVRpbWUuTm93LlRvU3RyaW5nKCJkZCIpOwogICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gZjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGY7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaXNFc2NhcGUgPSBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0KICAgIH0=