繁体   English   中英

是否可以在aspnet_membership表中更改LastLoginDate的日期格式?

[英]Is is possible to change the date format of the LastLoginDate in the aspnet_membership table?

在我正在工作的当前项目中,初始开发人员使用ASP.NET Membership来处理用户登录验证。 因此,aspnet_Membership表中的LastLoginDate和LastActivityDate以UTC格式保存。

无论如何以当地时间格式保存它? 或者有谁知道可以修改哪个存储过程来补偿时差(通过使用DATEADD()方法)?

aspnet_Membership_UpdateUserInfo是更新LastLoginDate的Sp。 您可以修改此SP并根据您的要求转换数据格式。

我会提醒您不要将数据从UTC更改为本地时间。

SqlMembershipProvider在本地时间返回MembershipUser.LastLoginDate和其他类似属性:即它将数据库值从UTC转换为本地。

因此,如果您通过Membership API访问此数据,则无需执行此操作。

如果您直接访问数据库中的数据,并且您确实希望SQL Server在本地时间返回它,那么为什么不在您从数据库中读取时将其转换。

例如,您可以在aspnet_Membership表上创建一个VIEW,如:

SELECT 
    ...
    LastLoginDate + GETDATE() - GETUTCDATE() AS LastLoginDateLocal
    ...
FROM aspnet_Membership

请注意,通过在SQL Server中进行转换,您将获得SQL Server的本地时间,这可能与托管应用程序的计算机上的本地时间不同。

UPDATE

来自评论:

我想知道为什么@Leo方法不起作用。

@Leo建议修改aspnet_Membership_UpdateUserInfo SP; 您需要修改更新您感兴趣的列的所有SP。例如, LastLoginDate也由aspnet_Membership_UpdateUser更新。

此外,如果您遵循此方法,则MembershipUser.LastLoginDate属性中返回的时间将不正确,因为SqlMembershipProvider代码假定数据库值为UTC。 要解决此问题,您需要修改SELECT此列的所有Membership SP,以转换回UTC。 例如aspnet_Membership_GetAllUsersaspnet_Membership_FindUsersByEmailaspnet_Membership_FindUsersByName ,...

另请注意,由于DST,在SQL Server中UTC和本地之间的转换有时会给出不正确的值(+/- 1h)(例如,差异GETDATE() - GETUTCDATE()是在DST运行期间计算的,但是用户上次在DST启动之前登录)。

为什么最好将数据库值保留为UTC,并在应用程序中进行任何转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM