- Fix Util.UnixTimeSinceEpoch:

* Unix epoch starts at midnight, not at 8:00am
  * All date/time handling should be done in UTC in the server, not in
    the local timezone.
  * Refactor out repeated computation of a constant value
- Added setting of CreationTime to some places where inventoryitems
  are created
This fixes Mantis#2390.
0.6.0-stable
Homer Horwitz 2008-10-18 15:26:41 +00:00
parent 48890ea349
commit 3a75a54da1
3 changed files with 11 additions and 4 deletions

View File

@ -754,6 +754,7 @@ namespace OpenSim.Framework.Communications.Capabilities
item.BasePermissions = 2147483647; item.BasePermissions = 2147483647;
item.EveryOnePermissions = 0; item.EveryOnePermissions = 0;
item.NextPermissions = 2147483647; item.NextPermissions = 2147483647;
item.CreationDate = Util.UnixTimeSinceEpoch();
if (AddNewInventoryItem != null) if (AddNewInventoryItem != null)
{ {

View File

@ -27,6 +27,7 @@
using System; using System;
using System.Data; using System.Data;
using System.Globalization;
using System.IO; using System.IO;
using System.IO.Compression; using System.IO.Compression;
using System.Net; using System.Net;
@ -59,6 +60,10 @@ namespace OpenSim.Framework
private static string regexInvalidPathChars = "[" + new String(Path.GetInvalidPathChars()) + "]"; private static string regexInvalidPathChars = "[" + new String(Path.GetInvalidPathChars()) + "]";
private static object XferLock = new object(); private static object XferLock = new object();
// Unix-epoch starts at January 1st 1970, 00:00:00 UTC. And all our times in the server are (or at least should be) in UTC.
private static readonly DateTime unixEpoch =
DateTime.ParseExact("1970-01-01 00:00:00 +0", "yyyy-MM-dd hh:mm:ss z", DateTimeFormatInfo.InvariantInfo).ToUniversalTime();
#region Vector Equations #region Vector Equations
/// <summary> /// <summary>
@ -290,19 +295,19 @@ namespace OpenSim.Framework
public static int ToUnixTime(DateTime stamp) public static int ToUnixTime(DateTime stamp)
{ {
TimeSpan t = (stamp.ToUniversalTime() - Convert.ToDateTime("1/1/1970 8:00:00 AM")); TimeSpan t = stamp.ToUniversalTime() - unixEpoch;
return (int) t.TotalSeconds; return (int) t.TotalSeconds;
} }
public static DateTime ToDateTime(ulong seconds) public static DateTime ToDateTime(ulong seconds)
{ {
DateTime epoch = Convert.ToDateTime("1/1/1970 8:00:00 AM"); DateTime epoch = unixEpoch;
return epoch.AddSeconds(seconds); return epoch.AddSeconds(seconds);
} }
public static DateTime ToDateTime(int seconds) public static DateTime ToDateTime(int seconds)
{ {
DateTime epoch = Convert.ToDateTime("1/1/1970 8:00:00 AM"); DateTime epoch = unixEpoch;
return epoch.AddSeconds(seconds); return epoch.AddSeconds(seconds);
} }

View File

@ -278,7 +278,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
CachedUserInfo userInfo = CachedUserInfo userInfo =
m_userTransactions.Manager.MyScene.CommsManager.UserProfileCacheService.GetUserDetails( m_userTransactions.Manager.MyScene.CommsManager.UserProfileCacheService.GetUserDetails(
ourClient.AgentId); ourClient.AgentId);
if (userInfo != null) if (userInfo != null)
{ {
InventoryItemBase item = new InventoryItemBase(); InventoryItemBase item = new InventoryItemBase();
@ -296,6 +296,7 @@ namespace OpenSim.Region.Environment.Modules.Agent.AssetTransaction
item.EveryOnePermissions=0; item.EveryOnePermissions=0;
item.NextPermissions = nextPerm; item.NextPermissions = nextPerm;
item.Flags = (uint) wearableType; item.Flags = (uint) wearableType;
item.CreationDate = Util.UnixTimeSinceEpoch();
userInfo.AddItem(item); userInfo.AddItem(item);
ourClient.SendInventoryItemCreateUpdate(item); ourClient.SendInventoryItemCreateUpdate(item);