该字符串未被识别为有效的DateTime错误

时间:2016-10-12 10:39:06

标签: c# visual-studio datetime datetimepicker date-formatting

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

错误:字符串未被识别为有效的DateTime

我从datagridview以不同的形式接收数据,我收到它并且可以很好地显示它,但现在我想将String格式的数据转换为日期格式并在datetimepickers表单上显示它。

接收数据:

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

我在这一行得到错误:

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

" d'德MMMM' de&#y; yyyy"格式,是我正在使用的,我用这种方式获得格式,只是为了看看格式是什么:

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: 

DataPLevantamento的价值是这样的数据:

  

30 de outubro de 2016

异常堆栈:

.split()

2 个答案:

答案 0 :(得分:1)

这是由于实际的CultureInfo CultureInfo需要与你的相等, 所以你必须创建一个新的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);

答案 1 :(得分:0)

使用自定义文化

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