Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
5 / 5 / 0
Регистрация: 11.09.2021
Сообщений: 578

Вывод DateTime в UTC

26.03.2024, 00:07. Показов 716. Ответов 4

Студворк — интернет-сервис помощи студентам
Как сделать чтобы Serilog в журнале выводил дату время UTC с чётырёхзначным значением миллисекунд?
Сейчас я получаю локальную ДатуВремя.

https://github.com/jhon65496/SerilogTestWinForm01

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
internal class Logger1
{
    public void CreateLogger()
    {
        Log.Logger = new LoggerConfiguration()
                        // add console as logging target
                        .WriteTo.Console(
                                        outputTemplate: "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} [{Level:u3}] {Message:lj}{NewLine}")                            
                        
                        // set default minimum level
                        .MinimumLevel.Debug()
                        .CreateLogger();
 
        string message = "`Parametr logging result`";
 
        // logging                        
        Log.Information($"Some `Information`. Parametr logging -- {message}");
 
        Log.CloseAndFlush();
    }
}

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
 
        CreateLogger();
    }
 
    public void CreateLogger()
    {
        Logger1 lg = new Logger1();
        lg.CreateLogger();
    }
}

2024-03-25 20:00:19Z [INF] Some `Information`. Parametr logging -- `Parametr logging result`

2. Как сделать чтобы можно было настроить варианты вывода
yyyy-MM-dd HH:mm:ss.fff zzz
или
yyyy-MM-dd | HH:mm:ss | fff | zzz
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.03.2024, 00:07
Ответы с готовыми решениями:

Utf8json - как при сериализации DateTime перевести в UTC 0
Здравствуйте. Подскажите пожалуйста, как в utf8json при сериализации перевести DateTime, который находится в другом классе, в UTC 0, и...

Преобразование текстового представления времени в формате UTC в локальное представление DateTime
Здравствуйте. Я в целом неплохо разбираюсь в классах DateTime и производных, но следующий случай поставил меня в тупик. Как...

Перевод из UTC в DateTime
Самый банальный вопрос) Как из UTC значения времени получить DateTime. НЕ НАОБОРОТ!

4
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
26.03.2024, 00:50
Лучший ответ Сообщение было отмечено dev3214 как решение

Решение

1. Для Utc используется отдельный Enricher, который пишет в свое свойство. Соответственно, нужно поправить outputTemplate немного:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using Serilog;
using Serilog.Core;
using Serilog.Events;
 
Log.Logger = new LoggerConfiguration()
    .WriteTo.Console(outputTemplate: "{UtcTimestamp:yyyy-MM-dd HH:mm:ss.ffff zzz} [{Level:u3}] {Message:lj}{NewLine}")
    .MinimumLevel.Debug()
    .Enrich.With<UtcTimestampEnricher>()
    .CreateLogger();
 
string message = "`Parameter logging result`";
 
// logging                        
Log.Information("Some `Information`. Parameter logging -- {message}", message);
 
 
class UtcTimestampEnricher : ILogEventEnricher
{
    public void Enrich(LogEvent logEvent, ILogEventPropertyFactory pf)
    {
        logEvent.AddPropertyIfAbsent(pf.CreateProperty("UtcTimestamp", logEvent.Timestamp.UtcDateTime));
    }
}
2. Это уже правится аналогично в outputTemplate свойстве.

PS: Вы некорректно работаете с сообщениями, Serilog заточен на работу с messageTemplate-ами, а не с интерполированными строками.
Поэтому правильно писать так:
C#
1
Log.Information("Some `Information`. Parameter logging -- {message}", message);
А не так:
C#
1
Log.Information($"Some `Information`. Parametr logging -- {message}");
Если приложение, которое логирует - фоновый сервис, который может длительное время работать без перезапуска, то со временем он может отъесть прилично памяти, если формировать сообщения некорректно.

Добавлено через 7 минут
На основной странице логгера, если глянете, упоминается:
Serilog message templates are a simple DSL extending .NET format strings. Parameters can be named, and their values are serialized as properties on the event for incredible searching and sorting flexibility:
И в документации еще несколько раз акцент на этом делается.
1
5 / 5 / 0
Регистрация: 11.09.2021
Сообщений: 578
27.03.2024, 14:06  [ТС]
IamRain,

Есть практика хранить ДатаВремя в одном столбце или в отдельных Дата, Время, Миллисекунды, TimeZone?
Цель: получить CSV, подключить к Excel.

Я попробовал несколько вариантов.
C#
1
2
3
4
5
6
7
8
outputTemplate: "{UtcTimestamp:yyyy-MM-dd HH:mm:ss.ffff zzz} " +                
                "| {UtcTimestamp:yyyy-MM-dd} " +
                "| {UtcTimestamp:HH:mm:ss.ffff} " +
                "| {UtcTimestamp:HH:mm:ss,ffff} " +
                "| {UtcTimestamp:HH:mm:ss} " +
                "| {UtcTimestamp:ffff} " +
                "| {Timestamp:zzz} " +
                "| {Level:u3} | {Message:lj} {NewLine}",
0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,228
27.03.2024, 19:22
Цитата Сообщение от dev3214 Посмотреть сообщение
Есть практика хранить ДатаВремя в одном столбце или в отдельных Дата, Время, Миллисекунды, TimeZone?
Кому как удобно, тут уже без разницы.

Кстати, из поста выше по первой ссылке упоминается :u модификатор для отображения в UTC.
Docs: Universal sortable modifier.
Работая c DateTime типом, придется сначала ручками конвертнуть в UTC, но DateTimeOffset умеет автоматически конвертировать в UTC при указании этого модификатора.
Although the result string should express a time as Coordinated Universal Time (UTC), no conversion of the original DateTime value is performed during the formatting operation. Therefore, you must convert a DateTime value to UTC by calling the DateTime.ToUniversalTime method before formatting it. In contrast, DateTimeOffset values perform this conversion automatically; there is no need to call the DateTimeOffset.ToUniversalTime method before the formatting operation.
А поскольку Serilog работает с DateTimeOffset, то, как более быстрый способ, можно просто указать :u в формате:
C#
1
.WriteTo.Console(outputTemplate: "{Timestamp:u} [{Level:u3}] {Message:lj}{NewLine}")
1
5 / 5 / 0
Регистрация: 11.09.2021
Сообщений: 578
27.03.2024, 19:24  [ТС]
IamRain,

Не по теме:


Спасибо.
С этим можете помочь: Вывод ProjectName?

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.03.2024, 19:24
Помогаю со студенческими работами здесь

Преобразовать String DateTime в UTC
Есть строка. К примеру: string s = &quot;23.08.2019 20:06:21&quot; Нужно как-то получить время UTC, соответствующее этому времени.

Сервер возвращает "UTC-05:00 Eastern Time (US & Canada)". Можно ли ее сохранить в БД как datetime
Сервер отдает мне строку &quot;UTC-05:00 Eastern Time (US &amp; Canada)&quot; что это за сущность? Могу ли я ее сохранить в базу как datetime?...

Правильный вывод DateTime
Добрый день! Есть небольшая неприятность. Добавляю в datagrid данные, делаю биндинг public DataTable FamilyTable { get; set; } ...

Вывод дня DateTime
Столкнулся с такой ситуацией. Есть DateTime, в окне нужно вывести только день без не значимых нулей. Тобишь: Text=&quot;{Binding Date,...

Вывод DateTime с определенным условием
Здравствуйте, подскажите, пожалуйста. Примерный код ниже: string str = Convert.ToString(DateTime.Now); string s = str; Мне нужно...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США. Нашел на реддите интересную статью под названием «Кто-нибудь знает, где получить бесплатный компьютер или. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru