2013年9月25日 星期三

Java 查詢可用時區參數與設定時區

    Java 中可以透過 TimeZone 物件來查詢、設定 有關時區資訊。

查詢目前使用的時區:
TimeZone.getDefault().getID(); // Asia/Taipei
TimeZone.getDefault().getDisplayName(); // friendly name ex: 台灣標準時間

設定時區:
TimeZone tx = TimeZone.getTimeZone("Indian/Cocos"); // "Indian/Cocos" 就是 TimeZone ID
TimeZone.setDefault(tx);

列出可用時區:
String [] ids = TimeZone.getAvailableIDs();
for (String timezone : ids) {
    System.out.println(timezone + " " + 
          TimeZone.getTimeZone(timezone).getDisplayName());
}

   如果要取得目前日期時間可以透過 Calendar 物件取的相關訊息:
Calendar now = Calendar.getInstance();
int hour = now.get(Calendar.HOUR_OF_DAY);
int minute = now.get(Calendar.MINUTE);
int second = now.get(Calendar.SECOND);
int month = now.get(Calendar.MONTH);
int day = now.get(Calendar.DAY_OF_MONTH);
int year = now.get(Calendar.YEAR);
System.out.printf("現在是 %d/%d/%d %02d:%02d:%02d", 
    year, (month+1), day, hour, minute, second);

    要注意的是,Calendar 物件類別中的 MONTH 是用 0 到 11 來到表 1 月到 12 月,所以取得的數值要加 1 才會顯示正確。
 
    當你發現上面顯示的日期時間與你的電腦不符時,有可能是 Java 解譯器用錯時區設定;當 Java 解譯器不曉得目前的預設時區的話,會直接使用格林威治時間。

[相關資料]
[Java] 日期方法 (Date method)

懸置物件(dangling object)、懸置指標(dangling pointer)、懸置引用(dangling reference)

下面解釋來源: 程式語言結構 1

(1)懸置物件(dangling object):一個仍然存放資訊的記憶體空間,可是已沒有辦法可存取這個空間,則此空間便被稱為懸置物件。

(2)懸置指標(dangling pointer):懸置指標意謂指標指到一個不存在任何有意義資訊的記憶體空間。

(3)懸置引用(dangling reference):懸置引用意謂指標變數指到一個已經不存在的記憶體空間。如Pascal語言中,x是一個指標變數,當執行了dispose(x)後,(即將x所佔用的記憶體空間歸還給系統),若想引用x,則將造成懸置引用現象。

根據 Object-Oriented Programming in C++ 的解釋如下:

Dangling pointer
   Pointer point to a heap-dynamic variable that has been de-allocated.

Dangling reference
   Pointers that refer to something that no longer there and also occurs when a function return a pointer point to local variable.


[關鍵字]
dangling object dangling pointer dangling reference

[相關參考網站]

網路資源搜尋

Filesonic Hotfile Search - 可以找尋 影音及應用程式的搜尋引擎,但是中文沒有支援,所以你要搜尋的影片必須知道它的英文翻譯才行,該search engine 主要搜尋 hotfile.com 與 filesonic.com 檔案伺服器。

ShareDigger - File Search Engine - 可以搜尋 4filehosting.com、 Badongo.com、Depositfiles.com、Filefront.com、iFolder.ru、Megashares.com、Megaupload.com、Multiply.com、Rapidshare.com、Rapidshare.de、Rapidsharing.com、Rapidupload.com、Sendspace.com、TurboUpload.com、zshare.net網站上面所分享的檔案。

FileCrop - Search and Download Rapidshare Megaupload and Hotfile Files

Global FTP Search Engine: Global File Search Engine

YunFile- 網路檔案上傳伺服器,只能上傳檔案分享給其他人,沒有搜尋的功能,但是還是可以透過 Google來搜尋該伺服器目前有哪些分享的檔案。

http://hotfile.com/

4shared.com - 免費文件分享及儲存 有自己的資源搜尋引擎。讚!!

[Keyword]
File search engine

[相關文章]
多個免費檔案分流服務,讓你上傳一次就能儲存到一堆免費空間!
免費網路硬碟比一比
網路硬碟 | ㊣軟體玩家
【下載】: 免費網路硬碟空間50g【分享】 - yam天空部落
雲端大戰,6大免費網路硬碟誰最好用(上) | T客邦 - 我只推薦好東西
雲端大戰,6大免費網路硬碟誰最好用(下) | T客邦 - 我只推薦好東西

網路開放課程鏈結


麻省理工學院「開放式課程網頁」首頁

http://www.myoops.org/twocw/mit/index.htm

國立交通大學OpenCourseWare開放式課程
http://ocw.nctu.edu.tw/index.php 

哈佛進修學院遠距教育計劃
http://www.myoops.org/twocw/harvard/welcome/index.htm 

約翰霍普金斯大學彭博公共衛生學院開放式課程
http://www.myoops.org/twocw/jhsph/index.htm

日本開放式課程網頁聯盟
http://www.myoops.org/twocw/jocw/index.htm

台灣開放式課程網頁聯盟
http://www.tocwc.org.tw/

TBSCTS [專科]程式語言Youtube影片
http://www.youtube.com/view_play_list?p=06810CD71A86FACC

C 入門教學Youtube影片
http://www.youtube.com/view_play_list?p=0B6BF05869177563

中小企業網路大學校-數位學習
http://www.smelearning.org.tw/

我要自学网
http://www.51zxw.net/

MyOOPS開放式課程
http://www.myoops.org/main.php

C++ Tutorial by Zaychenok
http://www.youtube.com/watch?v=H1gV4JQI7OI&feature=BFa&list=PL0D836394D2FDDDB6&index=1

XoaX.net Video Tutorials
http://xoax.net/

2013年9月7日 星期六

Notepad++ 開啟「分割視窗」同時檢視、比對兩份文件

     詳細的設定方式請參考 [重灌狂人- 如何在 Notepad++ 開啟「分割視窗」同時檢視、比對兩份文件?] 文章。
     設定的步驟如下:

1. 按「檢視」→「現行文件移動 | 拷貝」
2. 根據需求 勾選 「檢視」→ 「雙窗垂直同步捲動」或 「雙窗水平同步捲動」
 
    另外,如果你要做垂直比對時,最好把 「檢視」→ 「自動斷行」 選項取消,否則可能在捲動視窗時,一個視窗已經捲動到底了,另外一個視窗卻還沒到底的情況。

[參考資料]
重灌狂人- 如何在 Notepad++ 開啟「分割視窗」同時檢視、比對兩份文件?

透過 Chcp 修改 Windows Console 的 code page

        當你在 繁體 windows 下執行 cmd.exe 程式預設的 code page 為 MS950。當你開啟 Console 視窗後,可以執行 chcp 指令來查詢目前使用中的 code page 為何, 而  "使用中字碼頁: 950" 是我電腦查詢到的結果。
       
        如果你要改變 console 所使用的 code page,你可以下達下面的指令

        chcp 437
       
        437 是你所要設定的 code page;下達這個指令只會對你目前設定的 console 視窗有用,關掉 或 重新開啟 另外一個console 視窗時,該視窗還是使用預設的 code page,另外假設在還沒設定新的 code page 時,就執行 A.exe 程式,則該程式所使用的 code page 為預設的 code page。
   

2013 海昌星眸 廣告歌曲 - 宇恆-HAPPY DAY

2013年9月6日 星期五

Ubuntu 修改hostname

     你可以透過修改 /etc/hostname 與 /etc/hosts 檔案來修改 Ubuntu 主機名稱,步驟如下:

1. 開啟 terminal 視窗

2. sudo gedit /etc/hostname &
    然後修改你要的名稱, ex: abc

3. sudo gedit /etc/hosts &
   修改第二行,你應該會看到 [127.0.1.1 你原本的Hostname],將原本的Hostname 改為新的 abc。
 更改此檔的目的在於避免一些網路的 service 會不正常 ex: Apache、Tomcat...etc.

 4. 重新開機即可。

       另外你也可以透過 hostname 來查看你目前的主機名稱與暫時修改主機名稱(重新開機後名稱又會變回去原本的)。

       如果不想重新開機,你可以下達下面的指令來暫時更改主機名稱:
       hostname <新名稱>
       ex: hostname abc

參考資料:
Ubuntu: How to Change the Computer Name
How do I change the hostname without a restart?

Java Boolean getBoolean 總是回傳 false?

      之前試了 getBoolean 方法想要將字串轉成 boolean 型態,但是傳了 "true"、"True"、"TRUE" 最後的結果總是 false,用了google 查了一下,原來要使用 getBoolean 你必須設定 System 的 properties。 其實在 Java Doc 已經有提及到了,敘述如下:

      Returns true if and only if the system property named by the argument exists and is equal to the string "true".

      If there is no property with the specified name, or if the specified name is empty or null, then false is returned.


首先你可以透過 System.getProperties() 來取的目前執行你程式的一些系統參數設定,它主要是以 <key>=<value> 的形式顯示出來,所以當你要查詢某一個屬性值時,你可以透過 System.getProperty("key") 的方式得到 其對應的 value 值,如果該 key 不存在則回傳 null。

      另外除了透過 getBoolean 可以轉換成 基本型態的 boolean 值外,我們還可以透過 Boolean.valueOf(String s) 的方式轉換成 boolean的 Wrapper class型態。但 Boolean.valueOf(String s) 方法回傳 true 只有當字串為 "true"(大小寫無關) 時,其餘都回傳 false。

      我們可以透過 setProperty 來設定額外的系統參數,其設定型態也是 key/value的方式 ,setProperty ("key", "value"),除了設定 System.setProperty("TRUE", "TRUE"); 來讓 Boloean.getBoolean("TRUE") 來回傳 true ,我們也可以設定讓 Boloean.getBoolean("YES")也可以回傳 true 的值。

範例程式:

public class BooleanDemo {
    public static void main(String[] args) {
        System.out.println(System.getProperties());
        System.out.println("======================================");
        System.out.println(System.getProperty("java.runtime.name"));
        System.out.println("System.getProperty(\"true\") = " + System.getProperty("true"));
        System.out.println("System.getProperty(\"TRUE\") = " + System.getProperty("TRUE"));
        System.out.println("System.getProperty(\"True\") = " + System.getProperty("True"));
        
        System.out.println("Boolean.getBoolean(\"true\") = " + Boolean.getBoolean("true"));
        System.out.println("Boolean.getBoolean(\"TRUE\") = " + Boolean.getBoolean("TRUE"));
        
        System.out.println("Boolean.valueOf(\"true\") = " + Boolean.valueOf("true"));
        System.out.println("Boolean.valueOf(\"TRUE\") = " + Boolean.valueOf("TRUE"));
        
        System.setProperty("TRUE", "TRUE");
        System.setProperty("YES", "True");
        System.out.println("Boolean.getBoolean(\"TRUE\") = " + Boolean.getBoolean("TRUE"));
        System.out.println("Boolean.getBoolean(\"YES\") = " + Boolean.getBoolean("YES"));
        System.out.println("Boolean.getBoolean(\"yes\") = " + Boolean.getBoolean("yes"));

        System.clearProperty("YES");
        System.out.println("Boolean.getBoolean(\"YES\") = " + Boolean.getBoolean("YES"));
    }
}
    輸出結果: {java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=C:\Program Files\Java\jre7\bin, java.vm.version=23.25-b01, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) Client VM, file.encoding.pkg=sun.io, user.country=TW, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=Service Pack 3, java.vm.specification.name=Java Virtual Machine Specification, user.dir=C:\Documents and Settings\Josh\JavaCode\BooleanDemo, java.runtime.version=1.7.0_25-b17, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=C:\Program Files\Java\jre7\lib\endorsed, os.arch=x86, java.io.tmpdir=R:\TEMP\, line.separator= , java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows XP, sun.jnu.encoding=MS950, java.library.path=C:\Program Files\Java\jre7\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Program Files/Java/jre7/bin/client;C:/Program Files/Java/jre7/bin;C:/Program Files/Java/jre7/lib/i386;C:\Ruby200\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\Perforce;C:\Program Files\Java\jdk1.7.0_07\bin;C:\Program Files\Android\android-sdk\tools;C:\Program Files\Android\android-sdk\platform-tools;C:\Program Files\apache-ant-1.9.1\bin;C:\Program Files\Perforce\Server;C:\Program Files\eclipse-SDK-4.2-win32;;., java.specification.name=Java Platform API Specification, java.class.version=51.0, sun.management.compiler=HotSpot Client Compiler, os.version=5.1, user.home=C:\Documents and Settings\Josh, user.timezone=, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.7, java.class.path=C:\Documents and Settings\Josh\JavaCode\BooleanDemo\bin, user.name=Josh, java.vm.specification.version=1.7, sun.java.command=BooleanDemo, java.home=C:\Program Files\Java\jre7, sun.arch.data.model=32, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, sharing, java.version=1.7.0_25, java.ext.dirs=C:\Program Files\Java\jre7\lib\ext;C:\WINDOWS\Sun\Java\lib\ext, sun.boot.class.path=C:\Program Files\Java\jre7\lib\resources.jar;C:\Program Files\Java\jre7\lib\rt.jar;C:\Program Files\Java\jre7\lib\sunrsasign.jar;C:\Program Files\Java\jre7\lib\jsse.jar;C:\Program Files\Java\jre7\lib\jce.jar;C:\Program Files\Java\jre7\lib\charsets.jar;C:\Program Files\Java\jre7\lib\jfr.jar;C:\Program Files\Java\jre7\classes, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=pentium_pro+mmx pentium_pro pentium+mmx pentium i486 i386 i86} ====================================== Java(TM) SE Runtime Environment
System.getProperty("true") = null
System.getProperty("TRUE") = null
System.getProperty("True") = null

Boolean.getBoolean("true") = false
 Boolean.getBoolean("TRUE") = false 

Boolean.valueOf("true") = true
Boolean.valueOf("TRUE") = true

Boolean.getBoolean("TRUE") = true
Boolean.getBoolean("YES") = true
Boolean.getBoolean("yes") = false

Boolean.getBoolean("YES") = false


另外我在 Boolean.parseBoolean(“1”) = false…? 此篇討論文章,看到有人提供自己自製的方法來設定那些字串要回傳 true。 程式碼如下:

private boolean convertToBoolean(String value) {
    if ("1".equalsIgnoreCase(value)   || 
        "yes".equalsIgnoreCase(value) || 
        "true".equalsIgnoreCase(value)|| 
        "on".equalsIgnoreCase(value))
        return true;
    return false;
}

參考資料:
getBoolean(String str) and valueOf(String str) of Boolean class gives different output
有關 Boolean 的方法使用?
Boolean.parseBoolean(“1”) = false…?