Jump to content
Guilherme Teodoro

Cadeia de caracteres não foi reconhecida como DateTime válido - Internet Explorer e Microsoft Edge somente

Recommended Posts

Fala pessoal. Tudo bem!?

 

Estou com um erro que está me deixando maluco.

Estou tentando fazer um parse de string para datetime e não estou conseguindo.

var dt = DateTime.ParseExact(data, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None);

A variável data vem de uma requisição AJAX (Angular) via POST.

 

public JsonResult ListaParcelas(string codigo, string tipo, string data = null, int? leiAgregacao = null, IList<ParcelaAgregacao> parcelas = null)

 

Ao tentar passar essa linha acima, ele gera o erro:

"Cadeia de caracteres não foi reconhecida como DateTime válido"

Vamos aos detalhes.... A variável {data} está com a data formata de hoje, ou seja, 20/06/2017. 

Abrindo o Immediate Window e tentar executar:

DateTime.ParseExact(data, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None);

Gera erro. Porém, se executar:

DateTime.ParseExact("20/06/2017", "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None);

Funciona.

OK... Como uma forma de tentar resolver o problema, resolvi fazer um SPLIT dessa informação pela barra e dar um new Date informando cada campo separadamente.

Para minha surpresa, apresenta um erro de parse no momento de converter para int o dia.

if (!string.IsNullOrEmpty(data))
{
  var parteData = data.Split(@"/".ToCharArray());
  var dia = int.Parse(parteData[0]);
  var mes = int.Parse(parteData[1]);
  var ano = int.Parse(parteData[2]);

  dataVencimento = new DateTime(ano, mes, dia);
}

E este problema só ocorre com o Internet Explorer e o Microsoft Edge. Se eu utilizar o Google Chrome, Firefox, Opera, Safari, etc etc etc, funciona.

Alguma dica?

Edited by Guilherme Teodoro
Adicionando informações que podem ser úteis

Share this post


Link to post
Share on other sites
5 minutos atrás, Guilherme Teodoro disse:

Não tenho construtor de DateTime recebendo String.

Qual a namespace do seu DateTime?

É não tem, me equivoquei, foi mal.

var data = "20/11/2017"; // ou "2017/11/20"
var date = DateTime.Parse(data);

ou com tryparse

var dataString = "20/11/2017"; // ou "2017/11/20"
DateTime data;
if(!DateTime.TryParse(dataString, out data))
{
	//erro
}

 

Share this post


Link to post
Share on other sites

Mas o que vem dentro dessa variável?

Não tem diferença se vem de post ou get. O que importa é o valor dela. 

Acho que está vindo algo errado, senão teria funcionado.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By adolfo-moro
      Tenho um sistema feito em C# em Windows Form, gostaria de saber se tem algum jeito Do sistema abrir o navegador padrão do sistema Operacional, direcionar para meu site onde terá uma tela de login, a pessoa efetua o login e quando o mesmo for validado, o navegador fechar e voltar para o sistema com o valor do cookie gerado pelo site ou com um código do login, para efetuar posteriores operações por webservice.
      Não seria utilizando o WebBrowser
    • By frlopes
      Pessoal, boa tarde. 
       
      Estou com alguns probleminhas, se alguém puder me ajudar, agradeço imensamente!
      Tenho uma aplicação windows form em c# que tem um DataGridView, neste DataGridView tenho 2 colunas que são DataGridViewComboBoxColumn.
      O que eu espero que aconteça? Quando selecionado o valor de um, jogar o "Value" na coluna anterior. Enfim, Tentei com o código abaixo, porém, estou com alguns problemas:
       
      1 - Só consigo selecionar um item do grid, clicando 2 x no mesmo, a primeira vez que eu clico, não abre a lista de seleção, somente na segunda vez.
       
      2 - As vezes, retorna o valor "System.Data.DataRowView" na coluna anterior.
       
      3 - Os combos, coincidentemente, serão carregados com o mesmo valor, mas caso não fossem, como eu deveria fazer?
       
      4 - Existe uma forma de eu adicionar um item manualmente, por exemplo, como estão trazendo uma lista do banco de dados, supondo que eu traga "Santos", "São vicente", "Guarujá" e queira que o primeiro item seja "<selecione>", que não faz parte do banco de dados, não está no meu DataTable, como faço neste caso? 
       
       
      Obrigada, pessoal... 

       
       
      public FrmAlterarTipoAcomodacao() { InitializeComponent(); } TipoAcomodacao tipoAcomodacao = new TipoAcomodacao(); public void CarregarTipoAcomodacao() { DataTable dtbTipoAcomodacao = tipoAcomodacao.ListarTipoAcomodacao(); col1TipoAcomodacao.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO"; col1TipoAcomodacao.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO"; col1TipoAcomodacao.DataSource = dtbTipoAcomodacao; col1TipoAcomodacaoAutorizada.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO"; col1TipoAcomodacaoAutorizada.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO"; col1TipoAcomodacaoAutorizada.DataSource = dtbTipoAcomodacao; } private void FrmAlterarTipoAcomodacao_Load(object sender, EventArgs e) { dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); CarregarTipoAcomodacao(); dgvProfissional.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgvProfissional_EditingControlShowing); } public FrmAlterarTipoAcomodacao() { InitializeComponent(); } TipoAcomodacao tipoAcomodacao = new TipoAcomodacao(); public void CarregarTipoAcomodacao() { DataTable dtbTipoAcomodacao = tipoAcomodacao.ListarTipoAcomodacao(); col1TipoAcomodacao.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO"; col1TipoAcomodacao.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO"; col1TipoAcomodacao.DataSource = dtbTipoAcomodacao; col1TipoAcomodacaoAutorizada.ValueMember = "TIS_TAC_CD_TIPO_ACOMODACAO"; col1TipoAcomodacaoAutorizada.DisplayMember = "TIS_TAC_DS_TIPO_ACOMODACAO"; col1TipoAcomodacaoAutorizada.DataSource = dtbTipoAcomodacao; } private void FrmAlterarTipoAcomodacao_Load(object sender, EventArgs e) { dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); dgvProfissional.Rows.Add(); CarregarTipoAcomodacao(); dgvProfissional.EditingControlShowing += new DataGridViewEditingControlShowingEventHandler(dgvProfissional_EditingControlShowing); } ComboBox combo; private void dgvProfissional_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e) { ComboBox comboBox = e.Control as ComboBox; if (comboBox != null) { comboBox.SelectedIndexChanged -= new EventHandler(combo_SelectedIndexChanged); comboBox.SelectedIndexChanged += combo_SelectedIndexChanged; } } private void combo_SelectedIndexChanged(object sender, EventArgs e) { if ((sender as ComboBox).SelectedIndex > 0) { string selected = (sender as ComboBox).SelectedValue.ToString(); if (dgvProfissional.CurrentCell.ColumnIndex == 11) { dgvProfissional.Rows[dgvProfissional.CurrentRow.Index].Cells["col1CodigoTipoAcomodacao"].Value = selected; } if (dgvProfissional.CurrentCell.ColumnIndex == 18) { dgvProfissional.Rows[dgvProfissional.CurrentRow.Index].Cells["col1CodigoTipoAcomodacaoAutorizada"].Value = selected; } } }  

    • By Rui PG
      Boa tarde, Amigos!
      Por favor, alguém poderia me ajudar nessa questão, sou novo em desenvolvimento e estou a semanas tentando resolver esse problema.
      Desenvolvi um DataGrid emWPF preciso que quando o usuário clicar no "botão adicionar", gere automaticamente uma espécie de numeração sequencial no campo "followup", porém ao decorrer dos lançamentos dos dados no DataGrid, gere um numero sequencial ordenado do maior para o menor, ou seja, o último registro incluído no datagrid vai receber a última posição, conforme a prototipação da tela abaixo.
       
      Prototipação:

       
      XAML da Construção do DATAGRID:

       
      Código em C# do evento do botão adicionar, só falta colocar esse tipo de contador para o campo “follow-up”, na qual está destacado na figura:

       
      segue o código do botão adicionar onde tenho que programar essa auto numeração.
             public class JogaDadoNoGrid  
              {
                  public string bdgDtRegistro { get; set; }
                  public string bdgFollowup { get; set; }
                  public string bdgDtAgendamento { get; set; }
                  public string bdgHorario { get; set; }
                  public bool bdgVisitaRealizada { get; set; }
                  public bool bdgNaoRealizada { get; set; }
                  public bool bdgDesistiu { get; set; }
                  public string bdgMotivo { get; set; }
                  public string bdgObservacao { get; set; }
              }

              private void btnAddGrid_Click(object sender, RoutedEventArgs e)
              {
                JogaDadoNoGrid DadosTemporario = new JogaDadoNoGrid();

                  DadosTemporario.bdgDtRegistro = txtDataAtual.Text;
                  DadosTemporario.bdgFollowup = "AQUI QUE EU PRECISO GERAR O 1º, 2º, 3º ...."; 
                  DadosTemporario.bdgHorario = txtHorario.Text;
                  DadosTemporario.bdgDtAgendamento = txtDataAgendamento.Text;
                  DadosTemporario.bdgVisitaRealizada = chkVisitaRealizada.IsChecked.Value;
                  DadosTemporario.bdgNaoRealizada = chkNaoRealizada.IsChecked.Value;
                  DadosTemporario.bdgDesistiu = chkDesistiu.IsChecked.Value;
                  DadosTemporario.bdgMotivo = "Teste... Teste... Teste";
                  
                  DtgCadastroVisitantes.Items.Add(DadosTemporario);

                  txtDataAtual.Text = "";
                  txtDataAgendamento.Text = "";
                  txtHorario.Text = "";
                  chkDesistiu.IsChecked = false;
                  chkNaoRealizada.IsChecked = false;
                  chkVisitaRealizada.IsChecked = false;           
              }
       
       
       
      Agradeço aos amigos, pela ajuda.
       
    • By adriano22
      <?php   require_once 'lib/Database/Connection.php'; require_once 'Crud.php';

        class UsuarioModel extends Crud { protected $table = 'usuario'; private $nome; private $arquivo; private $formacao; private $nivel; private $email; private $senha; private $curso; private $disciplina; private $periodo;   public function setNome($nome) { $this->nome = $nome; } public function setArquivo() { $this->arquivo = $arquivo; } public function setFormacao($formacao) { $this->formacao = $formacao; } public function setNivel($nivel) { $this->nivel = $nivel; } public function setEmail($email) { $this->email = $email; } public function setSenha($senha) { $this->senha = $senha ; } public function setCurso($curso) { $this->curso = $curso; } public function setDisciplina($disciplina) { $this->disciplina = $disciplina; } public function setPeriodo($periodo) { $this->periodo = $periodo; }   public function insert() { $sql = "INSERT INTO $this->table (nome, arquivo, formacao, nivel, email, senha, curso, disciplina, periodo) VALUES (:nome, :arquivo, :formacao, :nivel, :email, :senha, :curso, :disciplina, :periodo)"; $stmt = Connection::prepare($sql); $stmt->bindParam(':nome', $this->nome); $stmt->bindParam(':arquivo', $this->arquivo); $stmt->bindParam(':formacao',$this->formacao ); $stmt->bindParam(':nivel', $this->nivel); $stmt->bindParam(':email', $this->email); $stmt->bindParam(':senha', $this->senha); $stmt->bindParam(':curso', $this->curso); $stmt->bindParam(':disciplina',$this->disciplina); $stmt->bindParam(':periodo', $this->periodo); return $stmt->execute(); }   public function update($id) { $sql = "UPDATE $this->table SET nome = :nome, arquivo = :arquivo, formacao = :formacao, nivel = :nivel, email = :email, senha = :senha, curso = :curso, disciplina = :disciplina, periodo = :periodo WHERE id = :id"; $stmt = Connection::prepare($sql); $stmt->bindParam(':nome', $this->nome); $stmt->bindParam(':arquivo', $this->arquivo); $stmt->bindParam(':formacao',$this->formacao ); $stmt->bindParam(':nivel', $this->nivel); $stmt->bindParam(':email', $this->email); $stmt->bindParam(':senha', $this->senha); $stmt->bindParam(':curso', $this->curso); $stmt->bindParam(':disciplina',$this->disciplina); $stmt->bindParam(':periodo', $this->periodo); $stmt->bindParam(':id', $id); return $stmt->execute();   }  
    • By lsramos
      Tenho um DataGridView que exibe uma tabela do banco de dados. Até aí tudo bem :)
      A questão é que o cabeçalho (primeira linha do DataGrid) traz o nome das colunas da tabela do banco (exemplo: matricula, nome, data_nascimento, etc).
      Eu queria saber se é possível, até para melhor visualização, que eu personalizasse esse cabeçalho sem alterar do banco.
      Algo como inserir no DataGrid o nome das colunas e exportar do banco de dados sem o nome da coluna.
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.