歐洲日期轉中文日期 歐洲大多數國家日期格式 24-12-1991 代表 dd-mm-yyyy 現在我想轉換成中文日期格式1991年12月24日 或者轉成國際標準格式日期 1991-12-24 yyyy-mm-dd格式 怎麼解決呢? 這裡我們可以通過正則表達式 輕鬆解決這個問題 通過這個例子我們可以舉 ...
歐洲日期轉中文日期
歐洲大多數國家日期格式 24-12-1991 代表 dd-mm-yyyy 現在我想轉換成中文日期格式1991年12月24日
或者轉成國際標準格式日期 1991-12-24 yyyy-mm-dd格式 怎麼解決呢?
這裡我們可以通過正則表達式 輕鬆解決這個問題
static void Main(string[] args) { //定義一組歐洲日期列表 數據來源可能是一張數據表 或txt文本文件等.. var enDateList = new List<string> { "01-01-2016", "20-02-2017", "10-03-2014", "28-02-2015", "11-06-2013", "01-05-2015", "12-10-2010", "24-01-2011" }; var cnDateList = new List<string>(); enDateList.ForEach(d => { //通過正則表達式進行轉換 var cnDate = System.Text.RegularExpressions.Regex.Replace(d, @"(\d{2})-(\d{2})-(\d{4})", "$3年-$2月-$1日"); cnDateList.Add(cnDate);//轉換的日期重新填充一個新的 日期列表 }); cnDateList.ForEach(Console.WriteLine);//列印轉換後的結果 Console.ReadKey(); }
通過這個例子我們可以舉一反三 轉換成 標準日期格式 yyyy-mm-dd 或者轉換美國的日期格式 mm-dd-yyyy
這個解決方法非常簡單, 如果你瞭解正則的情況下,可以看到其實就是通過正則 先分組然後替換分組實現的,
題外話:小弟在工作中感覺學會正則,會幫自己輕鬆愉快的解決很多問題, 所以如果你還不會正則表達式 那麼你應該
開始學習!
獲取用戶請求所在Ip地址和用戶的城市信息
這個需求問題在Web項目中基本都是必備功能!所以這裡貼出源碼,並解釋下代碼中的思想
/// <summary> /// 獲取客戶端IP /// </summary> /// <param name="req"></param> /// <returns></returns> public static string GetIp(RequestContext req) { try { //先用用 Request.ServerVariables ("HTTP_X_FORWARDED_FOR") 取IP 如果無法讀取會返回Null string result = req.HttpContext.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; if (string.IsNullOrEmpty(result)) { //再用正常來取得客戶端的IP地址 result = req.HttpContext.Request.ServerVariables["REMOTE_ADDR"]; } if (string.IsNullOrEmpty(result)) { //如果未讀取再用其它方式讀取嘗試 result = req.HttpContext.Request.UserHostAddress; } if (string.IsNullOrEmpty(result)) { //沒有讀取返回預設地址 result = "0.0.0.0"; } return result; } catch { return "0.0.0.0"; } }
上面讀取Ip地址代碼的巧妙在於Request.ServerVariables("REMOTE_ADDR") 來取得客戶端的IP地址,但如果客戶端是使用代理伺服器來訪問,
那取到的就是代理伺服器的IP地址,而不是真正的客戶端IP地址。要想透過代理伺服器取得客戶端的真實IP地址,就要使用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 來讀取。
如果客戶端沒有通過代理伺服器來訪問,那麼用 Request.ServerVariables ("HTTP_X_FORWARDED_FOR") 取到的值將是空的,所以我把它放在第一句執行,這樣可以保證儘可能讀取客戶端的Ip地址
接下來我們就可以通過Ip去獲取用戶所在城市的信息了(代碼如下)
/// <summary> /// 獲取城市Ip /// </summary> /// <param name="ip"></param> /// <returns></returns> public static string GetIpCity(string ip) { try { //通過淘寶API方式獲取用戶地址信息 string taoBaoApi = $"{"http://ip.taobao.com/service/getIpInfo.php?ip="}{ip}"; System.Net.WebRequest httpReq = System.Net.WebRequest.Create(taoBaoApi); httpReq.Timeout = 2000; //設置請求超時2秒 System.Net.WebResponse httpResp = httpReq.GetResponse(); System.IO.Stream respStream = httpResp.GetResponseStream(); using (System.IO.StreamReader reader = new System.IO.StreamReader(respStream)) { string jsonText = reader.ReadToEnd(); JObject addr = (JObject)JsonConvert.DeserializeObject(jsonText); if (addr["code"].ToString() != "0")//如果狀態Code不等0 就代表請求失敗 { return "未知地址"; } else { //獲取結果 string address = $"{addr["data"]["region"]}{addr["data"]["city"]}"; return address; } } } catch { return "未知地址"; } }
如何讓方法返回多個結果?
在工作編寫代碼中可能會遇到寫一個方法 我想返回多個結果集的問題,這種解決辦法 有幾種,小弟在這裡列出我最常用的2種.
方式1:通過out參數 進行多個結果參數返回, out參數在我們學習入門第二 三章就可能學過! 它的特點是可以把值類型當引用類型來傳遞!
這裡我們可以藉助它的特點來進行多個結果集返回!
例子1: 假如我們要寫個分頁的方法 GetPageData(),分頁它不僅要獲取分頁查詢後的結果集 還要獲取分頁這張表的總項數
基於這個需求我們可以只寫一個方法 就能同時獲取2個結果
/// <summary> /// 數據表 分頁 /// </summary> /// <param name="pageNum">指定頁數</param> /// <param name="pageSize">指定每頁多少項</param> ///<param name="outTotal">輸出當前表的總項數</param> /// <returns>輸出分頁後的結果集數據</returns> public IEnumerable<TEntity> GetPageData(int pageNum, int pageSize, out long outTotal)
調用方式
long tableCount;//拿到表的總項數 var data= _repExample.GetPageData(1, 20, out tableCount);//拿到分頁後的數據集
方式2: 可以同過定義一個類來接受多個結果集,比如基於上面的GetPage分頁的方法 我可以單獨定義一個 PageResult的類 來返回我的數據 (以下為偽代碼 演示用)
Public Class PageResult { /// <summary> /// 獲取或設置數據查詢總記錄數 /// </summary> public long total { get; set; } /// <summary> /// 獲取查詢總頁數 /// </summary> public long TotalPage { get { if (total % PageSize != 0) { return total / PageSize + 1; } else { return total / PageSize; } } } /// <summary> /// 獲取或設置查詢數據 /// </summary> public IEnumerable<TEntity> rows { get; set; } }
這樣我們可以用我們定義的這個類來接受返回的多個參數
未完~(持續更新 自我總結)