Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用TypeDescriptor.GetConverter.ConvertFromString转换日期时间(使用自定义格式)_C#_Datetime - Fatal编程技术网

C# 使用TypeDescriptor.GetConverter.ConvertFromString转换日期时间(使用自定义格式)

C# 使用TypeDescriptor.GetConverter.ConvertFromString转换日期时间(使用自定义格式),c#,datetime,C#,Datetime,有什么办法可以使你满意吗 TypeDescriptor.GetConverter.ConvertFromString使用自定义格式转换为DateTime,例如“2011-04-21 13-03-56” 如果没有,是否有任何日期时间格式可以应用于文件夹名称(/,\,:,等等,如您所知,不允许使用) 非常感谢您的帮助。提前谢谢 我是随机的 编辑: 由于我的要求似乎仍然没有得到正确的理解,我再次试图详细阐述我的问题。我的用户正在创建具有特定名称的文件夹。例如“1000链接主题1\u 2011-01-2

有什么办法可以使你满意吗

TypeDescriptor.GetConverter.ConvertFromString
使用自定义格式转换为
DateTime
,例如“
2011-04-21 13-03-56

如果没有,是否有任何日期时间格式可以应用于文件夹名称(/,\,:,等等,如您所知,不允许使用)

非常感谢您的帮助。提前谢谢 我是随机的

编辑:

由于我的要求似乎仍然没有得到正确的理解,我再次试图详细阐述我的问题。我的用户正在创建具有特定名称的文件夹。例如“1000链接主题1\u 2011-01-25 14-12-10”。他们可以随心所欲地组合信息,并在需要时省略信息。他们甚至不必关心案件敏感性。所以我可以面对另一个名为“1000链接主题2”的文件夹

我拥有的是一个类,每个可能的信息片段都有一个属性。在这种情况下,我会(因为我必须找到一种方法来检查每个属性的默认值,而不管我使用的是哪种属性类型的可空类型):

我的代码显然将文件夹名拆分为“\u1”,然后告诉每个片段它属于上述哪些属性类型。一旦我知道了我试图转换为类型的对应类型,就让我们使用
TypeDescriptor.GetConverter(t).ConvertFromString(info\u frag[I])
。我希望您现在理解为什么我不能使用其他转换方法

该代码适用于上述所有类型。我的问题是找到一个可用于文件夹名称的自定义日期时间格式。我知道的所有格式都使用冒号来分隔小时和分钟和秒

我想要的是一种使用
TypeDescriptor.GetConverter.ConvertFromString
自定义日期时间格式转换为日期时间对象的方法。如果这是不可能的,我需要找到一个标准的日期时间格式,它可以被指定为一个文件夹名称,而无需任何进一步的转换,或者以某种方式扩展我的自定义格式的内置日期时间格式。如果是后者,我不在乎能用几秒钟或几分钟。工作需要几个小时

再次感谢你这么有耐心,帮我解决了这个问题。你可以随意问更多的问题。我希望你能帮我把这个修好


Random-I-Am

我对您的问题进行了一些研究,发现标准DateTimeTypeConverter使用DateTime.Parse进行内部解析,它根本不侦听CurrentCulture信息。相反,您可以用自己的TypeConverter欺骗转换过程

如果可以的话,我不知道如何将新的typeconverter附加到现有的DateTime结构,因此我制作了一个小型AdvancedDateTime结构。。它是空的。没有人说您的自定义TypeConvert甚至应该返回这样的东西!这个函数返回一个常规日期时间。我提供了以下代码:

public class CustomDateTimeTypeConverter : TypeConverter
{
    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        return DateTime.ParseExact(value.ToString(), "yyyy-MM-dd HH-mm-ss", culture);
    }
}

[TypeConverter(typeof(CustomDateTimeTypeConverter))]
struct AdvancedDateTime
{
}

[TestFixture]
public class DateTime
{
    [Test]
    public void TypeConvert_StrangeFormat_ConvertsWithoutProblem()
    {
        string datetime = "2011-04-21 23-12-13";
        TypeConverter converter = TypeDescriptor.GetConverter( typeof (AdvancedDateTime) );
        var convertedFromString = converter.ConvertFromString(datetime);
        Assert.AreEqual(new DateTime(2011,4,21, 23,12,13), convertedFromString);
    }
}

我仔细研究了一下您的问题,发现标准的DateTimeTypeConverter在内部使用DateTime.Parse,它根本不听CurrentCulture信息。相反,您可以用自己的TypeConverter欺骗转换过程

如果可以的话,我不知道如何将新的typeconverter附加到现有的DateTime结构,因此我制作了一个小型AdvancedDateTime结构。。它是空的。没有人说您的自定义TypeConvert甚至应该返回这样的东西!这个函数返回一个常规日期时间。我提供了以下代码:

public class CustomDateTimeTypeConverter : TypeConverter
{
    public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
    {
        return DateTime.ParseExact(value.ToString(), "yyyy-MM-dd HH-mm-ss", culture);
    }
}

[TypeConverter(typeof(CustomDateTimeTypeConverter))]
struct AdvancedDateTime
{
}

[TestFixture]
public class DateTime
{
    [Test]
    public void TypeConvert_StrangeFormat_ConvertsWithoutProblem()
    {
        string datetime = "2011-04-21 23-12-13";
        TypeConverter converter = TypeDescriptor.GetConverter( typeof (AdvancedDateTime) );
        var convertedFromString = converter.ConvertFromString(datetime);
        Assert.AreEqual(new DateTime(2011,4,21, 23,12,13), convertedFromString);
    }
}
试试这个

 string m_strDate = DateTime.Now.ToString("MM/dd/yyyy");
 m_strDate = m_strDate.Replace("/", "");
将此
m_strDate
附加到您的文件夹中

我用于文本文件的示例如下

strPath += "/FileHeader_" + m_strDate + ".txt";
检查一下这个样品

DateTime dt=new DateTime(1990,5,6);
Console.WriteLine(TypeDescriptor.GetConverter(dt).ConvertTo(dt, typeof(string)));
string myStr="1991-10-10";
Console.WriteLine(TypeDescriptor.GetConverter(dt).ConvertFrom(myStr));
我编写的示例代码只是为了根据您的需求进行显示

       string s = "Folder";
        DateTime dt = new DateTime(1990, 5, 6);
        string str = TypeDescriptor.GetConverter(dt).ConvertTo(dt, typeof(string)).ToString();
        string myStr = "1991-10-10";
        string str1 = TypeDescriptor.GetConverter(dt).ConvertFrom(myStr).ToString();
        s = s + str1.Replace("/", "").Replace(":", "");
        textBox1.Text = s;
试试这个

 string m_strDate = DateTime.Now.ToString("MM/dd/yyyy");
 m_strDate = m_strDate.Replace("/", "");
将此
m_strDate
附加到您的文件夹中

我用于文本文件的示例如下

strPath += "/FileHeader_" + m_strDate + ".txt";
检查一下这个样品

DateTime dt=new DateTime(1990,5,6);
Console.WriteLine(TypeDescriptor.GetConverter(dt).ConvertTo(dt, typeof(string)));
string myStr="1991-10-10";
Console.WriteLine(TypeDescriptor.GetConverter(dt).ConvertFrom(myStr));
我编写的示例代码只是为了根据您的需求进行显示

       string s = "Folder";
        DateTime dt = new DateTime(1990, 5, 6);
        string str = TypeDescriptor.GetConverter(dt).ConvertTo(dt, typeof(string)).ToString();
        string myStr = "1991-10-10";
        string str1 = TypeDescriptor.GetConverter(dt).ConvertFrom(myStr).ToString();
        s = s + str1.Replace("/", "").Replace(":", "");
        textBox1.Text = s;


你的约会时间的输出格式应该是什么事实上我真的不在乎我用的是什么格式。我唯一的限制是我可以使用它并将其应用于文件夹名称。你需要秒数才能进入文件夹名称请详细说明:你想转换为哪种类型?发布你尝试过的代码。这可能有助于我们更好地编码你的日期时间的输出格式。事实上,我真的不在乎我使用的是哪种格式。我唯一的限制是,我可以使用它并将其应用于文件夹名称。你需要几秒钟才能进入文件夹名称请详细说明:你想转换为哪种类型?发布你尝试过的代码它可能有助于我们更好地编码-,这将
日期时间
转换为
字符串
,而这不是要求的!我想他没有读我的编辑。如果没有编辑,这将是一个有价值的答案。所以无论如何,谢谢你的贡献。@Andreas:谢谢你指出这一点!我更正了我的答案,同时也考虑了编辑。我需要使用TypeDescriptot.GetConverter.Convert。。方法,因为我不知道必须转换为哪些类型。Jon Skeet在此主题中回答了您有关类型转换器和日期时间的问题:。那应该有帮助,这会将
日期时间
转换为未被询问的
字符串
!我想他没有读我的编辑。如果没有编辑,这将是一个有价值的答案。所以无论如何,谢谢你的贡献。@Andreas:谢谢你指出这一点!我更正了我的答案,同时也考虑了编辑。我需要使用TypeDescriptot.GetConverter.Convert。。方法,因为我不知道必须转换为哪些类型。Jon Skeet在此主题中回答了您有关类型转换器和日期时间的问题:。那应该有帮助!如果需要,也添加秒数,并根据需要的格式进行更改。我如何使用此方法进行lat