簡體   English   中英

將DateTime存儲到cookie中的最佳方法是什么?

[英]What is the best way to store DateTime into cookies?

我正在開發一個ASP .NET項目,目前我正在使用此代碼在cookie上存儲和檢索DateTime:

HttpCookie cookie = new HttpCookie("myCookie");
if (Request.Cookies["myCookie"] != null)
{
    cookie = Request.Cookies["myCookie"];
}
else
{
    cookie["From"] = DateTime.Now.AddDays(-7).ToShortDateString();
    cookie["To"] = DateTime.Now.ToShortDateString();
    Response.Cookies.Add(cookie);
}
model.FromDate = DateTime.Parse(cookie["From"]);
model.ToDate = DateTime.Parse(cookie["To"]);

在我的視圖中,我使用Razor恢復模型值,如下所示:

<input type="text" id="from" value="@Model.FromDate.ToShortDateString()" readonly="readonly" />
<input type="text" id="to" value="@Model.ToDate.ToShortDateString()" readonly="readonly" />

當我在本地運行它時工作正常,但是當我上傳到生產時,從cookie恢復DateTime時,日期會在一天內更改。 例如,我選擇了從2016年3月25日到2016年4月1日的日期范圍,然后我又轉到了另一頁,當我回到此頁面時,頁面顯示的日期范圍是2016年3月24日到2016年3月31日,一天減少。

你知道我在這里做錯了什么,為什么這只是在生產中發生(我想是與服務器日期相關的東西),最后,什么是在cookie上存儲和檢索DateTime的最佳方法?

您可以將日期存儲在Ticks中

cookie["From"] = DateTime.Now.AddDays(-7).Ticks.ToString();
cookie["To"] = DateTime.Now.Ticks.ToString();

並像這樣恢復:

model.FromDate = new DateTime(Convert.ToInt64(cookie["From"]));
model.ToDate = new DateTime(Convert.ToInt64(cookie["To"]));

希望這對你有所幫助

將日期/時間存儲為string您應始終考慮時區。 我建議你使用DateTimeOffset而不是DateTime

var now = DateTimeOffset.Now;
var asString = now.ToString(CultureInfo.InvariantCulture);
var asDatetimeOffset = DateTimeOffset.Parse(asString, CultureInfo.InvariantCulture);

字符串看起來像這樣: 04/01/2016 22:01:09 +02:00

(您需要知道客戶端的時區才能正確計算其“本地”時間。在您的示例中,服務器使用它自己的時間。)

DateTime.Parse(cookie["From"]);的結果DateTime.Parse(cookie["From"]); 設置為DateTimeKind.Unspecified 任何進一步的操作(如AddDays)都取決於系統的時區。

我認為你應該指定文化並告訴解析器期望DateTimeKind

model.FromDate = DateTime.Parse(cookie["From"], CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal);
model.ToDate = DateTime.Parse(cookie["To"], CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal);

注意 :DateTime.ToShortDateString不是一個好的選擇,因為它是由當前文化的DateTimeFormatInfo對象定義的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM