A concatenação da string não parece funcionar em C#
-
21-09-2019 - |
Pergunta
Não sei o que há de errado com a seguinte sequência:
"Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + " to " + System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") + ")"
Não consigo obter a string concatenada. estou obtendo Report(29-Dec-2009
. Isso é tudo e o resto fica de fora da string.
Qual é a razão?
Solução
Experimente isso:
string filename =
String.Format(
"Report({0:dd-MMM-yyyy} to {1:dd-MMM-yyyy})",
System.DateTime.Now, System.DateTime.Now.AddMonths(-1));
EDITAR: Desde que em seu Download da caixa Você quebrou seu nome de arquivo no primeiro espaço em branco, você pode tentar um desses:
filename = HttpUtility.UrlEncode(filename); // OR
filename = """" + filename + """";
Parece que alguns navegadores não lida muito bem com os brancos: Os nomes de arquivos com espaços são truncados após o download. Verifique se você pode baixar outros nomes de arquivos com espaço em branco em outros sites.
Outras dicas
Você precisa atribuí -lo a algo:
string s = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + " to " + System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") + ")"
ATUALIZAÇÃO: Acabei de ver sua atualização para a pergunta. Como você está exibindo a string? Acho que você está exibindo em uma GUI e a etiqueta é muito curta para exibir o texto completo.
Experimente isso:
string newstring =
string.Format(
"Report ({0} to {1})",
System.DateTime.Now.ToString("dd-MMM-yyyy"),
System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy")
);
O que você está atribuindo o resultado? Seria mais fácil ler o código se você usasse string.format
Você não está atribuindo o resultado concatenado a nada, então não pode usá -lo:
string myConcatenated = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + ")";
Usando este código ...
string test = "Report(" + System.DateTime.Now.ToString("dd-MMM-yyyy") + " to " +
System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy") + ")";
Eu vi o seguinte resultado.
Report(29-Dec-2009 to 29-Nov-2009)
Pode ser que a string esteja sendo truncada mais tarde. Certifique -se de definir um ponto de interrupção logo após a execução deste código e verifique o valor da variável para a qual ela é atribuída (teste no meu caso).
Se, como no seu pergunta anterior, você está usando esse valor para criar um arquivo, pode ser que seja o espaço antes "para" que está causando o problema. Tente usar:
"Report("
+ System.DateTime.Now.ToString("dd-MMM-yyyy")
+ "To"
+ System.DateTime.Now.AddMonths(-1).ToString("dd-MMM-yyyy")
+ ")"
Em vez disso, e veja se isso o corrige.
Se isso faz Corrija -o, você provavelmente precisará descobrir como citar todo o nome do arquivo para que não seja tratado como os três argumentos separados, "Report(29-Dec-2009"
, "to"
e "29-Nov-2009)"
. Ou simplesmente deixe seus relatórios nomes sem espaços.
Eu escolheria o último, mas depois sou fundamentalmente oposto aos espaços em nomes de arquivos - eles tornam os scripts simples muito mais difíceis de escrever :-)