2016-01-22 3 views
0

У меня есть дата в строке как «20160127003500». Что мне нужно сделать, так это преобразовать это в метку времени Unix, добавляя к ней часы.Преобразование даты смещения времени с отметкой времени

Я хочу добавить часы смещения как «1» или «2» или «24».

Может ли кто-нибудь направить меня в правильном направлении.

С уважением

+0

Просто преобразуйте его в обычный DateTime и AddHours. Есть много руководств по конвертированию времени по всему SO. – Equalsk

+1

Эта строка выглядит так, как будто она находится в формате 'yyyyMMddHHmmss', который вы можете использовать с' DateTime.ParseExact'. Однако вам также нужно знать, следует ли интерпретировать его как локальное время, время UTC или время в каком-либо другом часовом поясе, поскольку время Unix основано на UTC. Не зная временного пояса источника, вы не можете этого сделать. –

+0

Просьба также уточнить, что именно вы подразумеваете под «Я хочу добавить смещение часов». –

ответ

2

Во-первых, разобрать всю строку (включая смещение вы упоминали в комментариях вопрос) к 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; 
+0

хороший! Это именно то, что мне нужно. Бесконечно благодарен. Отмечено как ответ. – Robin

Смежные вопросы