Как я могу преобразовать тики в формат даты?

#c# #timestamp #datetime-format

#c# #asp.net #sql-сервер #sql-server-2005

Вопрос:

Я преобразую значение тиков в дату следующим образом:

 Convert(datetime, (MachineGroups.TimeAdded - 599266080000000000)/864000000000);
 

Используя это, я получаю:

 9/27/2009 10:50:27 PM
 

Но я хочу только дату в этом формате:

 October 1, 2009
 

Мое примерное значение тиков равно

 633896886277130000
 

Каков наилучший способ сделать это?

Комментарии:

1. Мне кажется вполне реальным вопрос о том, как форматировать DateTime. Вывод toString().

2. Если он прочитал мой ответ на его вчерашний вопрос, я уже предоставил код для этого…

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

4. Он сделал попытку кода, так что, по крайней мере, он проявил усилия. Хотя вчера об этом не знали. Тем не менее, я дохожу до того, что могу не читать вопросы от «неизвестно (Google)». Они, как правило, не тратят много времени на правильную формулировку вопроса.

Ответ №1:

Объект DateTime может быть создан с определенным значением тиков. После того как вы определили значение тиков, вы можете выполнить следующие действия:

 DateTime myDate = new DateTime(numberOfTicks);
String test = myDate.ToString("MMMM dd, yyyy");
 

Ответ №2:

Это сделать намного проще:

 DateTime dt = new DateTime(633896886277130000);
 

Что дает

 dt.ToString() ==> "9/27/2009 10:50:27 PM"
 

Вы можете отформатировать это любым удобным для вас способом, используя dt.ToString(MyFormat) . Обратитесь к этой ссылке для строк формата. "MMMM dd, yyyy" работает для того, что вы указали в вопросе.

Не уверен, где вы получаете 1 октября.

Комментарии:

1. 1 октября — это просто пример формата.. Мне нужна инструкция convert, чтобы я мог использовать ее в инструкции SQL select

Ответ №3:

     private void button1_Click(object sender, EventArgs e)
    {
        long myTicks = 633896886277130000;
        DateTime dtime = new DateTime(myTicks);
        MessageBox.Show(dtime.ToString("MMMM d, yyyy"));
    }
 

Дает

 September 27, 2009
 

Это то, что вам нужно?

Однако я не понимаю, как с этим форматом обязательно легко работать в SQL-запросах.

Ответ №4:

Ответы до сих пор помогали мне придумать мои. Я опасаюсь UTC по сравнению с местным временем; тики всегда должны быть UTC IMO.

 public class Time
{
    public static void Timestamps()
    {
        OutputTimestamp();
        Thread.Sleep(1000);
        OutputTimestamp();
    }

    private static void OutputTimestamp()
    {
        var timestamp = DateTime.UtcNow.Ticks;
        var localTicks = DateTime.Now.Ticks;
        var localTime = new DateTime(timestamp, DateTimeKind.Utc).ToLocalTime();
        Console.Out.WriteLine("Timestamp = {0}.  Local ticks = {1}.  Local time = {2}.", timestamp, localTicks, localTime);
    }
}
 

Вывод:

 Timestamp = 636988286338754530.  Local ticks = 636988034338754530.  Local time = 2019-07-15 4:03:53 PM.
Timestamp = 636988286348878736.  Local ticks = 636988034348878736.  Local time = 2019-07-15 4:03:54 PM.
 

Комментарии:

1. Поддержано за заботу о UTC при сохранении даты / времени. Изменение часовых поясов может вызвать много проблем при получении времени на более позднем этапе, если часовой пояс мог измениться.