Во-первых, разобрать всю строку (включая смещение вы упоминали в комментариях вопрос) к DateTimeOffset
:
using System.Globalization;
string s = "20160129205500 +0100";
string format = "yyyyMMddHHmmss zzz";
DateTimeOffset dto = DateTimeOffset.ParseExact(s, format, CultureInfo.InvariantCulture);
Затем, есть несколько различных способов получить временную метку Unix. Обратите внимание, что чистым определением «отметки времени Unix» результат будет в терминах секунд, хотя в наши дни многие языки используют более высокую точность (например, миллисекунд, используемых в JavaScript).
Если вы ориентируетесь .NET 4.6 или выше, просто использовать встроенные методы:
// pick one for the desired precision:
long timestamp = dto.ToUnixTimeMilliseconds();
long timestamp = dto.ToUnixTimeSeconds();
Если вы ориентируетесь более раннюю версию .NET, то вычислить его самостоятельно:
DateTime epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
// pick one for the desired precision:
long timestamp = (long) dto.UtcDateTime.Subtract(epoch).TotalMilliseconds;
long timestamp = (long) dto.UtcDateTime.Subtract(epoch).TotalSeconds;
Просто преобразуйте его в обычный DateTime и AddHours. Есть много руководств по конвертированию времени по всему SO. – Equalsk
Эта строка выглядит так, как будто она находится в формате 'yyyyMMddHHmmss', который вы можете использовать с' DateTime.ParseExact'. Однако вам также нужно знать, следует ли интерпретировать его как локальное время, время UTC или время в каком-либо другом часовом поясе, поскольку время Unix основано на UTC. Не зная временного пояса источника, вы не можете этого сделать. –
Просьба также уточнить, что именно вы подразумеваете под «Я хочу добавить смещение часов». –