2017年3月9日 星期四

TimeStamp和Date的時間比對

最近發現一件值得注意的事

假設一個狀況

現在想要從資料庫中抓出資料,資料中有時間欄位,我想要比對時間,所以會用某個Date.equal()來比對資料的那個時間欄位的時間

但會發現Date表示的時間跟資料的時間是一樣的時候,Date.equal卻回傳false

原因可以在官方文件中找到
Note: This type is a composite of a java.util.Date and a separate nanoseconds value. Only integral seconds are stored in the java.util.Date component. The fractional seconds - the nanos - are separate. The Timestamp.equals(Object) method never returns true when passed a value of type java.util.Date because the nanos component of a date is unknown. As a result, the Timestamp.equals(Object) method is not symmetric with respect to the java.util.Date.equals(Object) method. Also, the hashcode method uses the underlying java.util.Date implementation and therefore does not include nanos in its computation.

簡言之:
資料從資料庫中取出後用get方法取得的時間會是java.sql.TimeStamp型態

java.sql.TimeStamp繼承java.util.Date

但TimeStamp內部其實還有個紀錄奈秒的欄位,而Date沒有

所以TimeStamp.equal(Date)必定會是false,因為比對奈秒欄位的時候,Date沒有奈秒欄位可以比

所以可行的做法:
1.Date.equal(TimpStamp)
2.Date.getTime() == TimeStamp.getTime()  (反之亦然)

不可行的作法:
TimeStamp.equal(Date)

2016年7月17日 星期日

好文摘要

最近發現了一篇好文章

文章出處: http://www.tutorialspoint.com/developers_best_practices/index.htm

主要講作者在軟體業待了十幾年的一些心得

而且不是含糊帶過或是範圍太過廣泛的空談

有實際的舉例及做法

感覺對我這種只比初學者好一點的半調子來說滿有幫助的

有起到引導和提醒的作用

所以就將文章節錄重點及翻譯

不過英文OK的網友還是建議看原文

因為翻譯要流暢及潤飾的關係,可能會故意不翻部分內容

有興趣或是覺得自己的學習方法成效不如預期的網友可以參考看看

翻得不好或有錯的話也請指正


2016年6月5日 星期日

SQL語法筆記

首先,下面是使用
https://dev.mysql.com/doc/index-other.html
裡的world database

1. SHOW
SHOW DATABASES 顯示所有在系統中的資料庫

SHOW TABLES 顯示該資料庫中的所有資料表(要先用USE database_name指定現在處理哪個資料庫 )

SHOW COLUMNS FROM table_name 顯示table_name表的欄位結構

2016年5月1日 星期日

ListView & Adapters 筆記

1.要使用ListView,也可以用ListActivity,不過ListActivity變化比較少,整個畫面就只能放一個ListView,而且ID固定

2.像是ListView,Spinner,GridView..等等的元件都叫做AdapterView,因為都要透過某種Adapter來指定資料

3.Adapter在MVC架構中就扮演著Controller的角色,也就是資料跟顯示元件之間溝通的橋樑

4.常見的Adapter有如下
BaseAdapter : 基本型Adapter,目測是用來讓其他Adapter繼承用的

ArrayAdapter : 顧名思義,主要用在處理單一陣列並顯示,要有變化就要改getView()

SimpleAdapter : 從官方文件可查到,只有一個建構子
public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
所以可以定義,SimpleAdapter主要用於項目內容超過一個時,可以利用其各自的ID快速對應上去,等於是想做花樣的時候,不需要用ArrayAdapter然後複寫getView()那麼麻煩
且強制使用裝Map的List

SimpleCursorAdapter : 跟SimpleAdapter類似,資料來源換成Cursor而已,學到現在只知道用在資料庫,不知道有沒有其他用途
有兩個建構子,主要使用這個
SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
另一個只是多個旗標的參數,就不管了

5.Adapter.notifyDataSetChanged();
當資料發生變化,比如加一筆或少一筆或改一筆之後,使用此方法,就可以將顯示元件更新到最新資料狀態

2016年4月23日 星期六

Android Style(樣式) & Theme(主題) Q&A

Style : 應用元件的多個屬性的集合,簡言之,就是把多個想指定的屬性一次寫好,包成一個模組,以後直接套用在需要設定這些屬性的原件上,省得每個元件都要重複設定一堆同樣的屬性。

Theme : 算是Style,不過是應用Activity

2016年3月25日 星期五

setOnDragListener 拖曳行為

剛剛在練習事件處理的時候

View.setOnClickListener  執行,點下去,成功了

View.setOnLongClickListener 執行,點下去不放,成功了

原本想說事件處理差不多就這個模式,要處理什麼動作就setOn某某Listener就好了

所以就繼續試setOnDragListener,想說應該拖曳就會觸發了,結果沒反應


所以就開始研究一下


2016年3月5日 星期六

Date Calendar SimpleDateFormat使用簡介

首先打一下預防針

這篇介紹的很精簡,而且很多都是腦補,不太參考正規的官方文件
這幾個類別應該還有其他應用的地方,有錯請指正


先介紹 Date
(是java.util.Date 不是 java.sql.Date,但目測功能應該大同小異,還沒用過不確定

這個類別雖然英文字典說叫做"日期",但其實裡面也記錄著比日還小的時、分、秒

所以Date這個類別的意義可以理解為

時間上的某一瞬間

所以理所當然就包含著這個瞬間的年、月、日、時、分、秒、毫秒這些時間資訊