Почему System.DateTime.Now работает, когда приложение запускается на моем компьютере, но не работает, когда я запускаю приложение поверх рабочей группы? - PullRequest
1 голос
/ 23 апреля 2019

Когда приложение запускается на компьютере, на котором оно хранится, оно загружает время, однако, когда оно загружается через рабочую группу, на другом компьютере оно не загружает время (даже если все остальное работает так, как должно).

Я создал приложение для Windows, использующее Unity и C #, для которого требуется возможность загружать сегодняшнюю дату из системы, и оно работает, когда приложение запускается на компьютере, на котором оно хранится (приложение не требуетустановка), однако, когда я пытаюсь запустить его через рабочую группу с другого компьютера, он не загружает время.Я протестировал все остальное в приложении, и единственная функция, которая, кажется, работает со сбоями, это функция DateTime.Now.Я также попытался заменить его DateTime.Today, System.DateTime.Now и несколькими другими вариантами, но все они не дали успеха.

public class TestTodayDate : MonoBehaviour
{
    public Text text;

    void Start()
    {
        DateTime today = DateTime.Now;
        string[] day = today.ToString("d").Split('/');
        text.text = $"{day[1]}.{day[0]}.{day[2]}";
    }
}

Это ожидаемый результат, который я получаю при запускеприложение локально.

Expected result

Это результат, который я получил, когда я ренял его на 2 разных компьютерах через рабочую группу.

Actual result

1 Ответ

2 голосов
/ 23 апреля 2019

В строке формата "d" используется настроенный на системном уровне формат строки короткой даты. Отдельные лица могут изменять этот формат в своей системе по своему усмотрению. Поэтому, если вам нужно полагаться на результат, выглядящий определенным образом, вам не следует использовать строку формата "d".

Вместо этого у вас может возникнуть соблазн сделать это:

void Start()
{
    DateTime today = DateTime.Now;
    string[] day = today.ToString("dd/MM/yyyy").Split('/');
    text.text = $"{day[1]}.{day[0]}.{day[2]}";
}

Но это тоже не совсем правильно. В строках формата даты .Net символ / имеет особое значение, когда он стоит вместо системного разделителя даты. Опять же, это значение может отличаться от ожидаемого в зависимости от культурных или пользовательских настроек, имеющихся в ОС.

Что вы действительно должны сделать, это:

void Start()
{
    text.text = DateTime.Now.ToString("d.M.yyyy");
}

Это всегда будет обеспечивать ожидаемое значение (хотя я должен был угадать формат дня, ожидаете ли вы когда-либо увидеть 0 в начале месяца) и сэкономит вам немного памяти создание массива и промежуточной строки.

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