Думаю, в этом все сказано. Если я использую DateTime.Now, я получаю дату и время с точки зрения сервера. Я слышал о решении JavaScript, но мне интересно, есть ли другое решение.
спасибо
Думаю, в этом все сказано. Если я использую DateTime.Now, я получаю дату и время с точки зрения сервера. Я слышал о решении JavaScript, но мне интересно, есть ли другое решение.
спасибо
Что бы я сделал, это создать скрытое поле ввода, а затем подключить Javascript-процедуру к событию onsubmit для формы. Эта процедура будет заполнять скрытое поле временем на клиентской машине.
Скрытое поле может использоваться с ASP.NET с помощью класса HTML "HtmlInputHidden". Вы просто даете вам контроль ввода атрибута runat = "server", как и любой другой серверный элемент управления.
Затем сервер может прочитать это время, когда форма отправляется обратно. Вы можете даже обернуть это в серверном элементе управления, если вам нужно сделать это в нескольких местах.
В качестве альтернативы вы можете сделать это с помощью AJAX, но реализация будет зависеть от используемой вами библиотеки.
Мне нравится идея использования браузера/системного времени и часового пояса или позволяющая им выбирать свой часовой пояс. В прошлом проекте я использовал что-то вроде этого:
<script language="javascript">
function checkClientTimeZone()
{
// Set the client time zone
var dt = new Date();
SetCookieCrumb("ClientDateTime", dt.toString());
var tz = -dt.getTimezoneOffset();
SetCookieCrumb("ClientTimeZone", tz.toString());
// Expire in one year
dt.setYear(dt.getYear() + 1);
SetCookieCrumb("expires", dt.toUTCString());
}
// Attach to the document onload event
checkClientTimeZone();
</script>
А затем на сервере:
/// <summary>
/// Returns the client (if available in cookie) or server timezone.
/// </summary>
public static int GetTimeZoneOffset(HttpRequest Request)
{
// Default to the server time zone
TimeZone tz = TimeZone.CurrentTimeZone;
TimeSpan ts = tz.GetUtcOffset(DateTime.Now);
int result = (int) ts.TotalMinutes;
// Then check for client time zone (minutes) in a cookie
HttpCookie cookie = Request.Cookies["ClientTimeZone"];
if (cookie != null)
{
int clientTimeZone;
if (Int32.TryParse(cookie.Value, out clientTimeZone))
result = clientTimeZone;
}
return result;
}
Или вы можете передать его как параметр URL и обрабатывать его в Page_Load:
http://host/page.aspx?tz=-360
Не забудьте использовать минуты, так как не все часовые пояса целые часы.
если вы поддерживаете профиль пользователя, вы можете попросить их рассказать вам свой часовой пояс, а затем выполнить необходимые вычисления.
Альтернативой является геолокация пользователя на основе его/ее IP-адреса. Или геолокация, если браузер имеет эту возможность (скоро для Firefox). Когда у вас есть местоположение пользователя, вы можете найти часовой пояс.
Решение javascript, вероятно, является хорошим и легким.
Клиент и сервер не могут быть полностью синхронизированы, поэтому возникает вопрос, хотите ли вы время на клиентском компьютере или хотите время на сервере, но настроены на различия в часовых поясах. Javascript может дать вам время на клиенте (включая часовой пояс). Вы также можете комбинировать время на сервере с часовым поясом клиента.
Тем не менее, вы никогда не можете получить время с более высокой точностью, чем размерность запроса.
Я использовал этот метод в ASP.Net с VB
Dim strLanguage As String = Request.UserLanguages(0)
Dim currentCulture As CultureInfo = CultureInfo.CreateSpecificCulture(strLanguage)
Dim dateformat As String = currentCulture.DateTimeFormat.ShortDatePattern
Это даст формат времени данных компьютера, просматривающего данные.