簡體   English   中英

在將每個變量放入 datetime 對象之前解析字符串以獲取日期

[英]Parse the string to take the date before putting each variable into datetime object

當我嘗試執行附加代碼時收到此警告。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace prueb2 {
   public partial class Acusado: Form {
       public Acusado() {
           InitializeComponent();
       }

       private void Acusado_Load(object sender, EventArgs e) {
           listView1.Items.Clear();
           List < ACUSADOcLAS > listaAcusado;

           try {
               listaAcusado = BD.GetAcusado();
               if (listaAcusado.Count > 0) {
                   ACUSADOcLAS acusado;
                   for (int i = 0; i < listaAcusado.Count; i++) {
                       acusado = listaAcusado[i];
                       listView1.Items[i].SubItems.Add(acusado.NumeroSeguroSocial.ToString());
                       listView1.Items[i].SubItems.Add(acusado.NombreAcusado);
                       listView1.Items[i].SubItems.Add(acusado.ApellidoPaternoAcusado);
                       listView1.Items[i].SubItems.Add(acusado.ApellidoMaternoAcusado);
                       listView1.Items[i].SubItems.Add(acusado.FechaNacimientoAcusado.ToString());

                       listView1.Items[i].SubItems.Add(acusado.GeneroAcusado);
                       listView1.Items[i].SubItems.Add(acusado.DireccionAcusado);
                       listView1.Items[i].SubItems.Add(acusado.NivelMaximoEstudiosAcusado);
                       listView1.Items[i].SubItems.Add(acusado.EtnicidadAcusado);
                       listView1.Items[i].SubItems.Add(acusado.ReligionAcusado);
                   }
               } else {
                   MessageBox.Show("No hay acusados", "Alerta");
               }
           } catch (Exception ex) {
               MessageBox.Show(ex.Message, ex.GetType().ToString());
           }
       }

       private void button1_Click(object sender, EventArgs e) {
           BD.AddAcusado(int.Parse(txtNumSeg.Text), txtNombreA.Text, txtApPat.Text, txtApMat.Text, DateTime.Parse(dateTimeFecha.Text), comboGenero.Text, txtDireccion.Text, comboEstudios.Text, txtEtnicidad.Text, txtReligion.Text);
           txtNumSeg.Text = "";
           txtNombreA.Text = "";
           txtApPat.Text = "";
           txtApMat.Text = "";
           dateTimeFecha.Text = "";
           comboGenero.Text = "";
           txtDireccion.Text = "";
           comboEstudios.Text = "";
           txtEtnicidad.Text = "";
           txtReligion.Text = "";
           this.Acusado_Load(this, null);
       }

   }
}

你能幫我嗎?

由於日期字符串無效,您可能會遇到異常。 您需要先驗證它。

嘗試這個:

DateTime tempDateTimeFecha;
bool isValid = DateTime.TryParse(dateTimeFecha.Text, out tempDateTimeFecha);

現在,如果isValid == true您可以將tempDateTimeFecha作為參數傳遞給BD.AddAcusado()方法。

我在嘗試解析 datagridview 的日期列時遇到了同樣的問題。 以下過程幫助我解決了這個問題:我檢查了我的循環體並將循環終止的最大數量減少了 1。

    int days = 0;
    Datetime d;
    for (int i = 1; i < pastedCells -1; i++){ 
            d = Convert.ToDateTime(dgv_Copy.Rows[i].Cells[1].Value);
            days = DateTime.DaysInMonth(d.Year, d.Month);
            Console.WriteLine(days + "\t" + d);
       }
    //result:
    //31    2002-05-31 0:00
    //30    2002-11-30 0:00
    //31    2003-05-31 0:00
    //30    2003-06-30 0:00
    //31    2003-10-31 0:00
    //30    2003-11-30 0:00
    //29    2004-02-29 0:00
    //31    2004-10-31 0:00

請注意:解析日期取決於格式(查看此https://docs.microsoft.com/en-us/dotnet/standard/base-types/parsing-datetime了解更多信息。更重要的是,如果您的循環體試圖傳遞一個nullempty ,那么它肯定會彈出錯誤。

另外,請記住捕獲異常,但不要在檢查編碼錯誤后捕獲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM