Я занимаюсь «переработкой» приложения, которое было запущено в PHP некоторое время назад. Участвующий разработчик покинул компанию довольно давно, и все попытки связаться с ним упали на обочину.Преобразование PHP в .Net C#
Мне не нужна помощь в преобразовании всего сайта в его довольно простое приложение. Однако мы интегрируемся с сервисом API (у кого плохо документирована документация), и у меня возникают проблемы с пониманием их строк dateTime.
Вот отрывок (единственный бит) о том, как они там используются.
" даты и времени выражается в виде числа, полученного из алгоритма с использованием день месяц год час минуты и секунды следующим образом:
date=year<<20;
date|=month<<16;
date|=day<<11;
date|=hour<<6;
date|=minute;
Для того, чтобы распаковать дату из заданного числа выглядит следующим образом:
year=(date & 0xfff00000) >> 20;
month=(date & 0x000f0000) >> 16;
day=(date & 0x0000f800) >> 11;
hour=(date & 0x000007c0) >> 6;
minute=(date & 0x0000003f);
"
Сейчас идет мой вопрос. Разработчик (и это рабочий пример) создал следующую функцию PHP, которая преобразует временную метку в требуемый формат. Я не уверен, что побитовая метка времени является «универсальным алгоритмом».
Я пробовал оглядываться и ничего не нашел.
/**
* Converts a unixtime stamp to a bitwise timestamp
*
* @access public
* @param mixed $unixtime
* @return void
*/
function convert_unixtime_to_bitwise($unixtime)
{
/*$year = date('Y', $unixtime);
$month = date('m', $unixtime);
$day = date('j', $unixtime);
$hour = date('G', $unixtime);
$min = date('i', $unixtime);*/
$year = date('Y', $unixtime);
$month = date('m', $unixtime);
$day = date('j', $unixtime);
$hour = date('G', $unixtime);
$min = date('i', $unixtime);
$date = 0;
$date = $year << 20;
$date |= $month << 16;
$date |= $day <<11;
$date |= $hour <<6;
$date |= $min;
return $date;
}
/**
* Converts a bitwise datestamp to a standard unixtime stamp
*
* @access public
* @param mixed $timestamp
* @return void
*/
function convert_bitwise_to_unixtime($timestamp)
{
$dateline = array();
$dateline['year'] = ($timestamp & 0xfff00000) >> 20;
$dateline['month'] =($timestamp & 0x000f0000) >> 16;
$dateline['day'] = ($timestamp & 0x0000f800) >> 11;
$dateline['hour'] = ($timestamp & 0x000007c0) >> 6;
$dateline['min'] = ($timestamp & 0x0000003f);
return mktime($dateline['hour'], $dateline['min'], 0, $dateline['month'], $dateline['day'], $dateline['year']);
}
Может ли кто-нибудь помочь мне преобразовать это в .Net в самые простые моды. В идеале я бы написал метод расширения для объекта datetime, чтобы вернуть «побитовое»? объект и методы расширения для побитовой метки времени в метку времени datetime. Я бы идеально в конечном итоге с чем-то похожим на bel ..
public static class Extensions
{
public static BitWiseDateStamp ToBitWiseDateStamp(this DateTime timeStamp)
{
return BitWiseDateStamp.New(timeStamp);
}
}
public class BitWiseDateStamp
{
private string _value;
public string Value
{
get { return _value; }
set { _value = value; }
}
public static BitWiseDateStamp New(DateTime date)
{
var b = new BitWiseDateStamp();
var bitWiseStr = string.Empty;
//= Convert to bitwise string format...
b.Value = bitWiseStr;
return b;
}
public override string ToString()
{
return this._value;
}
public DateTime ToDateTime()
{
var date = DateTime.MinValue;
var dateStr = string.Empty;
//== Convert bitwise string to date string respresenation
DateTime.TryParse(dateStr, out date);
return date;
}
}
Я очень ценю любую помощь, которую любой может предоставить.
Приветствия,
Нико
Теперь я даже не понял, что это было легко конвертировать. Здесь я пытаюсь работать в совершенно разных усадьбе. Иногда ответ смотрит вам в лицо. Большое спасибо – Nico