Перевод времени на c#

ZULI

Client
Регистрация
09.09.2020
Сообщения
423
Благодарностей
165
Баллы
43
Комрады, подскажите, как на c# перевести в такой строке время на 1 час назад

Есть файл, в котором вот такие строки:

1|29.03.2021 00:30|Текст Текст Текст
2|29.03.2021 01:30|Текст Текст Текст
3|29.03.2021 02:30|Текст Текст Текст

Должно в итоге быть

1|28.03.2021 23:30|Текст Текст Текст
2|29.03.2021 00:30|Текст Текст Текст
3|29.03.2021 01:30|Текст Текст Текст
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 681
Благодарностей
1 863
Баллы
113

Vvafel

Client
Регистрация
24.12.2017
Сообщения
80
Благодарностей
34
Баллы
18
C#:
string variable = project.Variables["variable"].Value; //this variable has the value, for example, 1|28.03.2021 20:30|Текст Текст Текст
var regexGroups = Macros.TextProcessing.Regex(variable, @"(?<=\|).*?(?=\|)", "0");
if (regexGroups.Count == 0)
{
    project.SendInfoToLog("regex error");
}
else
{    
    System.Globalization.CultureInfo us = new System.Globalization.CultureInfo("en-US");
    string format = "dd'.'MM'.'yyyy' 'HH':'mm";
    DateTime startTime = DateTime.ParseExact(regexGroups[0].FirstOrDefault(), format, us);
    DateTime stopTime = DateTime.ParseExact("01.01.0001 01:00", format, us);
    TimeSpan roznica = startTime - stopTime;
    string startdatetime = Convert.ToString(roznica.TotalMilliseconds);
    double ticks = double.Parse(startdatetime);
    TimeSpan time = TimeSpan.FromMilliseconds(ticks);
    DateTime startdate = new DateTime(time.Ticks);
    project.Variables["variable"].Value = variable.Replace(regexGroups[0].FirstOrDefault(), startdate.ToString("dd.MM.yyyy HH:mm"));
}
Он должен работать ;-)
 
  • Спасибо
Реакции: Alexmd

semafor

Client
Регистрация
27.12.2016
Сообщения
289
Благодарностей
400
Баллы
63
C#:
string input = "1|29.03.2021 00:30|Текст Текст Текст";
//если не найден сепаратор "|" бросаем исключение
if(!input.Contains("|")) throw new Exception("input string error");

//Разбираем вх строку на одномерный массив по сепаратору "|"
string[] inputarr = input.Split('|');
//Получаем объект DateTime
DateTime dt = DateTime.Parse(inputarr[1]);
//Отнимаем 1 час
string dtmod = dt.AddHours(-1).ToString();
//Собираем выходную строку
string result = string.Join("|", new string[] {inputarr[0], dtmod, inputarr[2]});

return result;
 
  • Спасибо
Реакции: Vvafel и Alexmd

Alexmd

Client
Регистрация
10.12.2018
Сообщения
1 021
Благодарностей
1 385
Баллы
113
C#:
var list = project.Lists["список"];
for(int i = 0; i < list.Count; i++){
    DateTime time = new DateTime();
    try{
        DateTime.TryParse(list[i].Split('|')[1], out time);
        list[i] = list[i].Replace(list[i].Split('|')[1], time.AddHours(-1).ToString("dd.MM.yyyy HH:mm"));
    }
    catch{}
}
 
  • Спасибо
Реакции: ZULI, Vvafel и semafor

ZULI

Client
Регистрация
09.09.2020
Сообщения
423
Благодарностей
165
Баллы
43

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)