该字符串未被识别为有效的日期时间错误

本文关键字:日期 时间 错误 有效 字符串 识别 | 更新日期: 2023-09-27 18:12:38

是的,我知道这个问题有很多主题,我搜索并看到了很多,但我仍然无法解决我的问题。

错误:字符串未被识别为有效的日期时间

我正在接收数据从一个datagridview是在一个不同的形式,我收到它,可以显示它只是很好,但现在我想转换的数据是在字符串格式的日期格式和显示它在datetimepickers形式。

接收数据:

    public EditObras(string id, string NomeObra, string idCliente, string DataPLevantamento, string DataRLevantamento, string Estado, string DataRMateriais, string DataInicioObra, string DataConclusao, string DataVestoria, string Obs, string Prompor, string Levantpor, string executpor)
        {
            InitializeComponent();
            label4.Text = (string)id;
            textBox1.Text = (string)NomeObra;
            textBox2.Text = (string)idCliente;
            dateTimePicker1.Value = DateTime.ParseExact(DataPLevantamento, "d' de 'MMMM' de 'yyyy", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None);
            // textBox3.Text = (string)DataPLevantamento;
            textBox4.Text = (string)DataRLevantamento;
            comboBox1.Text = (string)Estado;
            textBox5.Text = (string)DataRMateriais;
            textBox6.Text = (string)DataInicioObra;
            textBox7.Text = (string)DataConclusao;
            textBox8.Text = (string)DataVestoria;
            textBox12.Text = (string)Obs;
            textBox9.Text = (string)Prompor;
            textBox10.Text = (string)Levantpor;
            textBox11.Text = (string)executpor;
}

我得到了这一行的错误:

dateTimePicker1.Value = DateTime.ParseExact(DataPLevantamento, "d' de 'MMMM' de 'yyyy", System.Globalization.CultureInfo.CurrentCulture, System.Globalization.DateTimeStyles.None);

"d' de ' mmm ' de 'yyyy"格式,是我使用的格式,我用这种方式得到了格式,只是想看看格式是什么:

string datePattern = System.Globalization.CultureInfo.CurrentUICulture.DateTimeFormat.LongDatePattern;
        textBox1.Text = datePattern;

DataPLevantamento的值是这样的数据:

30 de outubro de 2016

异常堆栈:

System.FormatException was unhandled
  HResult=-2146233033
  Message=A cadeia de caracteres não foi reconhecida como valor DateTime válido.
  Source=mscorlib
  StackTrace:
       em System.DateTimeParse.ParseExact(String s, String format, DateTimeFormatInfo dtfi, DateTimeStyles style)
       em System.DateTime.ParseExact(String s, String format, IFormatProvider provider, DateTimeStyles style)
       em GestãodeobrasGasFenosa.EditObras..ctor(String id, String NomeObra, String idCliente, String DataPLevantamento, String DataRLevantamento, String Estado, String DataRMateriais, String DataInicioObra, String DataConclusao, String DataVestoria, String Obs, String Prompor, String Levantpor, String executpor) em C:'Users'BugDroid'Documents'Visual Studio 2015'Projects'GestãodeobrasGasFenosa'GestãodeobrasGasFenosa'EditObras.cs:line 26
       em GestãodeobrasGasFenosa.Form1.dataGridView1_CellDoubleClick(Object sender, DataGridViewCellEventArgs e) em C:'Users'BugDroid'Documents'Visual Studio 2015'Projects'GestãodeobrasGasFenosa'GestãodeobrasGasFenosa'Form1.cs:line 606
       em System.Windows.Forms.DataGridView.OnCellDoubleClick(DataGridViewCellEventArgs e)
       em System.Windows.Forms.DataGridView.OnDoubleClick(EventArgs e)
       em System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       em System.Windows.Forms.Control.WndProc(Message& m)
       em System.Windows.Forms.DataGridView.WndProc(Message& m)
       em System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       em System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       em System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       em System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       em System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       em System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       em System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       em System.Windows.Forms.Application.Run(Form mainForm)
       em GestãodeobrasGasFenosa.Program.Main() em C:'Users'BugDroid'Documents'Visual Studio 2015'Projects'GestãodeobrasGasFenosa'GestãodeobrasGasFenosa'Program.cs:line 19
       em System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       em System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       em Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       em System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       em System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
       em System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       em System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

该字符串未被识别为有效的日期时间错误

这是由于实际的CultureInfoCultureInfo要等于你的,所以你必须创建一个新的CultureInfo变量

我猜这是葡萄牙语。

string DataPLevantamento = "30 de outubro de 2016";
    var provider = new System.Globalization.CultureInfo("pt-PT"); 
    string result = DateTime.ParseExact(DataPLevantamento,
                        "d' de 'MMMM' de 'yyyy",
                        provider,
                        System.Globalization.DateTimeStyles.None).ToString();
    Console.WriteLine(result);

尝试使用自定义文化

CultureInfo culture = new CultureInfo("pt-PT"); 
dateTimePicker1.Value = DateTime.ParseExact(DataPLevantamento, "d' de 'MMMM' de 'yyyy", 
                        culture, System.Globalization.DateTimeStyles.None);