關於Mongo時差的雜言碎語


 

  說起時間,這里先貼上獲取時間的方法:

 1   #region 獲取周、月、年時間
 2 
 3         /// <summary>
 4           ///    獲取本周第一天時間
 5        /// </summary>
 6           /// <returns></returns>
 7         public DateTime GetWeekBegin()
 8         {
 9             DateTime dtWeekFirstDay =
10                 DateTime.Today.AddDays(1 - Convert.ToInt16(DateTime.Today.DayOfWeek));
11             return dtWeekFirstDay;
12         }
13 
14         /// <summary>
15         ///     獲得本月第一天時間。
16         /// </summary>
17         /// <returns></returns>
18         public DateTime GetMonthBegin()
19         {
20             var dtMonthFirstDay = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
21             return dtMonthFirstDay;
22         }
23 
24         /// <summary>
25         ///     獲得半年的時間。
26         /// </summary>
27         /// <returns></returns>
28         public  DateTime GetHalfYear()
29         {
30             DateTime dtHalfYearFirstDay = DateTime.Now.AddMonths(-6);
31             return dtHalfYearFirstDay;
32         }
33 
34         #endregion

注意:在獲取本周一天時,按正常國人的習慣是以周一為第一天,外面的基本是以周日為一周的第一天。要設周一或周日為第一天就看需要而設定。

在Console.WriteLine中運行如下圖:

在上圖中可以看到我們所獲得的時間與本地是一致的。另外再嘮叨下Mongo這個數據庫,以NoSql為主打方向,方式在前幾年來說還是很新穎,對寫慣了SQL語句的人來說又可以挑戰新的數據庫查詢語句。Mongo的優點、原理之類的抓了個鏈接:http://www.cnblogs.com/hoojo/archive/2011/06/01/2066119.html感興趣有時間的可以去看看。當然不管什么技術都有其劣勢與缺陷,感興趣的同學可上谷歌必應之類去搜索探究下。在我看來,NoSql就入夜后暈睡前那碗夜宵,吃完后渾身毛孔舒張,飄飄然,人欲成仙。但夜宵僅僅只是個小點心,當作睡前暖胃可以,當作白日正餐就不行了。當然SQL跟NoSql各有優勢各有方向,剛才只是一時餓極,胡說而已。

送給大家一個網站,主要是用於將MySql語句轉為Mongo數據庫語句,收藏着以后或許會用得上:http://www.querymongo.com/。不想看的朋友我順手貼下這兩者的相同的查詢不同的語句吧:對於MySql

1 SELECT COUNT(*) FROM BlackList WHERE create_time > "2013/4/10" and bl_id = 0

對於Mongo

db.BlackList.group({
    "initial": {
        "countstar": 0
    },
    "reduce": function(obj, prev) {
        prev.countstar++;
    },
    "cond": {
        "create_time": {
            "$gt": "2013\/4\/10"
        },
        "bl_id": 0
    }
});

是不是有點像JS的格式。

發現跑題有點遠,把心收一下開始切入正題:在實際項目開發過程中,我們或多或少的都要對數據庫進行各種操作,如CRUD,如數據存儲雲雲。前幾日遇見個問題,主是統計數據中日期大於某日的字段時,會發現我們的查詢語句中的查詢時間並非上面中圖片所顯示中的那樣。而是比我們本地時間晚。舉個例子來說,我相統計出出生日期是晚於1988年1月1日0:00:00的所有人的數量,也就是大於該日期。但返回的數據卻是1987年12月31日16:00:00。這是我們的方法邏輯錯了嗎?非也,事實上這種代碼:

1  int getTodayCount;
2             getTodayCount =
3                 _blackList.Collection.Count(Query.And(Query.EQ("bl_type", 0), Query.GTE("create_time", DateTime.Today)));

獲取到的是真實的現在的時間,只不過是格林威治時間而已。不管是.NET平台還是JAVA,都是相同的問題。所以想要獲得確實的北京時間需要改動如下:

 1         #region 獲取周、月、年時間
 2 
 3         /// <summary>
 4         ///     獲取本周第一天時間
 5         /// </summary>
 6         /// <returns></returns>
 7         public DateTime GetWeekBegin()
 8         {
 9             DateTime dtWeekFirstDay =
10                 DateTime.Today.AddDays(1 - Convert.ToInt16(DateTime.Today.DayOfWeek)).AddHours(8);
11             return dtWeekFirstDay;
12         }
13 
14         /// <summary>
15         ///     獲得本月第一天時間。
16         /// </summary>
17         /// <returns></returns>
18         public DateTime GetMonthBegin()
19         {
20             var dtMonthFirstDay = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).AddHours(8);
21             return dtMonthFirstDay;
22         }
23 
24         /// <summary>
25         ///     獲得半年的時間。
26         /// </summary>
27         /// <returns></returns>
28         public  DateTime GetHalfYear()
29         {
30             DateTime dtHalfYearFirstDay = DateTime.Now.AddMonths(-6).AddHours(8);
31             return dtHalfYearFirstDay;
32         }
33 
34         #endregion

多加個8個小時就時區挪到當前我們所在東八區。這也只是個細節的問題。

這是小弟潛水博客源近一年寫的東西,希望大家能不吝斧正。謝謝大家。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM