最近跟手機串接其中一支 API 的時候,小編在規格上設計了 request 必須帶一個 UUID 的值給 backend,以 Android 來說其實直接使用 UUID.randomUUID().toString() 就可以了,但 iOS 熱門的 FCUUID library 看起來好像給了一個錯誤的實作,而且大家好像常誤解了 UUID 的意思。為了這件事,昨天凌晨跟朋友弄了一個小時 Orz
---
一般大家常知道的 UUID 應該是像這樣 8909ea35-8b0e-4e1a-8ba3-9c0af47c77ca,由 8-4-4-4-12 及 16 進制的字元,共 36 個字元所組成的,Java 及一些 npm 的 library 也是如此實作。可是 iOS 的 FCUUID 卻是產生 8909ea358b0e4e1a8ba39c0af47c77ca,連續 32 個字元的字串
---
下面是對話內容,沒想到 UUID 的格式還有不一樣的 Orz
---
(I: ios, B: backend)
* I:你說的uuid有長度限制嗎?
* B:uuid 就是 36 chars
* I:format我不用管對吧,我只要送36個字元過去
* B:uuid 就 uuid
* I:你要well format的uuid,還是我給你一串36個字元的字串
* B:well format 的 uuid
* I:ok
* B:因為我就是講 uuid 啊 xddd
* I:這詞早就被亂用了
* B:怎說?
* I:很多人的uuid不是那個uuid阿,就一串unique的id,以前接過很多api,uuid就unique的id,他們就這樣叫,也沒人在管,uid??uuid??阿災,他們都這樣叫
* B:不夠嚴謹,這工程師不行吧
(半小時後)
* I:要不要dash呢?
* B:要,因為是 uuid
* I:我現在的uuid是用lib產生的
* B:昏
* I:uuidForSesion,這method聽起來是不是很完美,完全就是我們要的
* B:看起來是
* I:但他是32個char,沒4個dash
* B:心累 orz
---
雖然小編不會寫 Objective-C 但還是去 FCUUID 翻了一下程式碼 (https://github.com/fabiocaccamo/FCUUID/blob/master/FCUUID/FCUUID.m#L99),發現作者拿到 UUID 之後把 - 取代為空字串,所以只剩下 32 個字元。看了 README 的所有內容也沒提到會改變 UUID 的格式,「This library provides the simplest API to obtain universally unique identifiers with different levels of persistence.」
最後看到更有趣的一個 method (https://github.com/fabiocaccamo/FCUUID/blob/master/FCUUID/FCUUID.m#L358),uuidValueIsValid 會判斷所傳入的字串是否為 UUID 格式,結果不知道是不是為了相容於正確的 UUID 格式,裡面的 regex 寫成 ^[0-9a-f]{32}|[0-9a-f]{8}-([0-9a-f]{4}-){3}[0-9a-f]{12}$,讓小編啼笑皆非 囧
只不過在 GitHub 上都沒有討論到 32 個字元及 36 個字元的話題,不知道是不是使用 FCUUID 的 iOS 開發者都沒有這種需求呢?
#uuid #ios #fcuuid
同時也有10000部Youtube影片,追蹤數超過2,910的網紅コバにゃんチャンネル,也在其Youtube影片中提到,...
「c# tostring格式」的推薦目錄:
- 關於c# tostring格式 在 Kewang 的資訊進化論 Facebook 的精選貼文
- 關於c# tostring格式 在 コバにゃんチャンネル Youtube 的最讚貼文
- 關於c# tostring格式 在 大象中醫 Youtube 的最佳解答
- 關於c# tostring格式 在 大象中醫 Youtube 的最讚貼文
- 關於c# tostring格式 在 C# 關於DateTime.tostring的格式問題- 看板Soft_Job - 批踢踢 ... 的評價
- 關於c# tostring格式 在 C#: 字串插值(String interpolation) 的格式化 - 伊果的沒人看筆記本 的評價
c# tostring格式 在 コバにゃんチャンネル Youtube 的最讚貼文
c# tostring格式 在 大象中醫 Youtube 的最佳解答
c# tostring格式 在 大象中醫 Youtube 的最讚貼文
c# tostring格式 在 C#: 字串插值(String interpolation) 的格式化 - 伊果的沒人看筆記本 的推薦與評價
同時,在字串插值時可以針對內容作格式化,只需要用 : 來區隔,妥善運用可以省下一堆 ToString() 的空間。 例如當我們要將時間格式化的時候,就可以:. ... <看更多>
c# tostring格式 在 C# 關於DateTime.tostring的格式問題- 看板Soft_Job - 批踢踢 ... 的推薦與評價
今天遇到了一個問題,就是關於OS系統和C#中的Datetime.tostring的問題
一般我自己寫程式是用.tostring("yyyy/MM/dd")
中文OS的輸出就是很正常的2015/04/01這樣,但是今天幫客戶裝系統遇到了一個問題
就是作業系統的OS是英文版(國外的跨國公司)
結果tostring("yyyy/MM/dd")的輸出格式變成這樣2015.04.01
如果存SQL的時候格式是Datetime或是轉換過存字串20150401八碼這樣其實不會有什麼問
題
偏偏踩到不知道哪個潛貝留的坑(還好大一坑,到處都是)
SQL資料給我存字串 -> 2015/04/01這樣 ,結果程式就掛掉了
(變成SQL的where條件是2015.04.01,完全撈不到資料,諸如此類的問題)
當然是可以改程式啦,不過考慮到系統本身就沒考慮到這方面的問題,怕會有其他地方出
錯,想說還是調整OS的部份讓他能夠輸出正確 (當然如果真的沒辦法只好調整程式了)
我地區、日期時間格式等都調整了,OS右下角顯示的日期也是2015/04/01,但是程式裡面
的tostring("yyyy/MM/dd")的輸出還是2015.04.01
系統語言還是ENGILSH,他們IT堅持不給我改這個,想請問
1.是不是改了系統語言就會照我想的輸出2015/04/01這樣呢?
2.還是說還有哪裡的OS設定我漏了調整了?
還請有相關經驗的人回答
P.S. OS是Server 2012 R2、幫客戶安裝的是IIS架的網站
有去GOOGLE到OS可以設定日期分隔符號,可是那好像是Server 2003才有的設定,我Serve
r
2012 R2的作業系統找不到這個設定
回報一下,最後是調整IIS的.NET全球化設定改為中文台灣解決問題
--
我覺得驅逐艦是艦隊裡最萌的艦種了 潛航戰正輕航重重輕驅 ◥▁▁▁▁ ◢
真
其他的都應該重造 水空艦規空空巡雷巡逐 ◤ ██ /-
。
艦戰 空母巡洋裝洋艦 □–□◢◤
紳
如果各位有興趣的話可以一起成為驅逐艦 艦 母 洋艦巡艦 ▼ㄑ ◢
士
但是要經過蘿ㄏㄨ 改造 艦 洋 ▼ㄧ /◣
提
因為我們只會接受蘿莉 絕對不會接受外觀超過14歲的BBA 艦 ◢ /◣– ◤ /█◣
督
※ 發信站 批踢踢實業坊 來自
※ 文章網址
※ 編輯
※ 編輯
※ 編輯
→ manaup: poi? 04/01 21:02
BBA
當時也沒想到(沒遇過這方面的問題)
我是以為yyyy/MM/dd 的 / 就是指文字字符/,結果去查了才發現 / 是代表系統的日期分
隔符號,定值/字符應該是給yyyy\\/MM\\/dd
※ 編輯: a47135 (114.42.208.136), 04/01/2015 21:10:04
明天去測一下IIS的全球化設定改成台灣中文看看
(忘記說幫客戶裝的程式是網站)
※ 編輯: a47135 (114.42.208.136), 04/01/2015 21:11:31
※ 編輯: a47135 (114.42.208.136), 04/01/2015 21:12:01
※ 編輯: a47135 (114.42.208.136), 04/01/2015 21:12:42
意思是說直接去修改.tostring嗎XD
倒是個很簡潔的方式,我還沒想過說XD
※ 編輯: a47135 (114.42.208.136), 04/01/2015 22:31:51
※ 編輯: a47135 (114.42.208.136), 04/01/2015 22:32:37
主要就是因為想到的都改了,還是不知道OS該去哪裡改(不改系統語言的情況下)
那是舉例啦XD TimeNow不是固定的時日
※ 編輯: a47135 (114.42.208.136), 04/01/2015 22:56:23
※ 編輯: a47135 (114.42.208.136), 04/01/2015 22:59:04
那就是要改程式啦,基本上只要決定要動程式,這個問題就沒什麼好問的了,會問是想說
看看有沒有辦法不動程式的情況下處裡囉,存Datetime格式當然是對的,只是今天不是追
究為啥不這樣做(挖坑的都不知道十幾年前死到哪去的的老鬼了)
會有這種問題就是因為有些王X蛋不照規定寫程式啊,要馬存Datetime要馬存八碼
Datetime不管是2014/04/01還是2014.04.01還是2014-04-01吃得下去,出來也是直接轉成
Datetime作業,八碼就Convert.todatetime(convert.toint32("0000/00/00")),也是沒
有問題
就是有人存帶分隔符號的時間字串才出包的XD
重購的新系統是多國語言版本,有考慮到這部分,只是還是有用舊程式的客戶啊,要費工
去改實在有點雞肋
(尤其這個客戶又很機歪,改什麼程式做什麼都要凹不付錢,根本毫無$可言)
與其花時間去弄這個不如去寫其他客戶的程式 <-很現實的問題
※ 編輯: a47135 (114.42.208.136), 04/01/2015 23:27:37
※ 編輯: a47135 (114.42.208.136), 04/01/2015 23:32:34
※ 編輯: a47135 (60.245.65.202), 04/02/2015 09:27:06
就是老闆給凹我才會去幫他們裝程式的好嗎
我的意思是這種客戶應付一下就好
※ 編輯: a47135 (49.216.233.147), 04/02/2015 18:58:21
你是回樓上a先生還是我啊XD
※ 編輯: a47135 (49.216.235.88), 04/02/2015 19:46:43
... <看更多>