Проблема в добавлении дней до даты Проблема в C# - PullRequest
1 голос
/ 09 июля 2020

Я использую C# в Visual Studio 2019. Я написал код, чтобы добавить дни в дату, и дата находится в Label1. Когда я выполняю код в своей локальной системе, он работает нормально. Но когда я выполняю код на сервере, он ошибочно добавляет дни к дате.

Здесь показан мой код:

protected void Page_Load(object sender, EventArgs e)
{
     if (!IsPostBack)
     {
         Label1.Text = DateTime.Now.ToString("dd/MM/yyyy");
     }
}

protected void Button1_Click(object sender, EventArgs e)
{
    Label1.Text = Convert.ToDateTime(Label1.Text).AddDays(1).ToString("dd/MM/yyyy");
}

Выполнение кода на сервере возвращает следующий результат - для пример сегодняшней даты - 07.09.2020, и я получаю этот результат:

  • При нажатии кнопки: 7/10/2020
  • При нажатии кнопки: 11/7/2020
  • При нажатии кнопки: 08/11/2020
  • При нажатии кнопки: 12/08/2020
  • При нажатии кнопки: 09/12/2020
  • При нажатии кнопки: 13/09/2020

Ответы [ 3 ]

1 голос
/ 09 июля 2020

Это работает на моей машине, потому что я француз ...

Каковы ваши языковые настройки системы и формат даты?

Вы должны сохранить DateTime в частной переменной и использовать ее вместо метки для увеличения, чтобы избежать проблем с преобразованием:

private DateTime Label1DateTime;

private void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
  {
    Label1DateTime = DateTime.Now;
    Label1.Text = Label1DateTime.ToString("dd/MM/yyyy");
  }
}

private void Button1_Click(object sender, EventArgs e)
{
  Label1DateTime = Label1DateTime.AddDays(1);
  Label1.Text = TheDateTime.ToString("dd/MM/yyyy");
}

Теперь он должен работать в любой системе.

В WinForms вы также можете использовать свойство Tag метки, если не хотите создавать член класса ...

private void Form_Load(object sender, EventArgs e)
{
  Label1.Tag = DateTime.Now;
  Label1.Text = ((DateTime)Label1.Tag).ToString("dd/MM/yyyy");
}

private void Button1_Click(object sender, EventArgs e)
{
  if ( Label1.Tag is DateTime )
  { 
    var date = ((DateTime)Label1.Tag);
    date = date.AddDays(1);
    Label1.Tag = date;
    Label1.Text = date.ToString("dd/MM/yyyy");
  }
}
0 голосов
/ 10 июля 2020

Я удалил формат даты («дд / ММ / гггг»), проблема решена.

protected void Page_Load (объект-отправитель, EventArgs e) {if (! IsPostBack) {

            DateTime dt = DateTime.Now;
            DateTime dateonly = dt.Date;
            Label1.Text = dateonly.ToString().Replace(" 12:00:00 AM","");
           
        }
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = Convert.ToDateTime(Label1.Text).AddDays(1).ToString().Replace(" 12:00:00 AM", "");
        
    }   
0 голосов
/ 09 июля 2020

Вы можете указать культуру потока, в котором выполняется программа, чтобы добиться одинакового поведения на всех машинах.

https://docs.microsoft.com/en-us/dotnet/api/system.threading.thread.currentculture

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...