40、怎樣將 GB2312 編碼的字符串轉(zhuǎn)換為 ISO-8859-1 編碼的字符串?
代碼如下所示:
String s1 = "你好";
String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");
41、日期和時(shí)間:
(1)如何取得年月日、小時(shí)分鐘秒?
(2) 如何取得從 1970 年 1 月 1 日 0 時(shí) 0 分 0 秒到現(xiàn)在的毫秒數(shù)?
(3) 如何取得某月的最后一天?
(4)如何格式化日期?
答:
問(wèn)題 1:創(chuàng)建 java.util.Calendar 實(shí)例,調(diào)用其 get()方法傳入不同的參數(shù)即可獲得參數(shù)所對(duì)應(yīng)的值。Java 8 中可以使用 java.time.LocalDateTimel 來(lái)獲取,代碼如下所示。
public class DateTimeTest {
? ? public static void main(String[] args) {
? ? ? ? Calendar cal = Calendar.getInstance();
? ? ? ? System.out.println(cal.get(Calendar.YEAR));
? ? ? ? System.out.println(cal.get(Calendar.MONTH));
? ? ? ? // 0 - 11
? ? ? ? System.out.println(cal.get(Calendar.DATE));
? ? ? ? System.out.println(cal.get(Calendar.HOUR_OF_DAY));
? ? ? ? System.out.println(cal.get(Calendar.MINUTE));
? ? ? ? System.out.println(cal.get(Calendar.SECOND));
? ? ? ? // Java 8
? ? ? ? LocalDateTime dt = LocalDateTime.now();
? ? ? ? System.out.println(dt.getYear());
? ? ? ? System.out.println(dt.getMonthValue());
? ? ? ? // 1 - 12
? ? ? ? System.out.println(dt.getDayOfMonth());
? ? ? ? System.out.println(dt.getHour());
? ? ? ? System.out.println(dt.getMinute());
? ? ? ? System.out.println(dt.getSecond());
? ? }
}
問(wèn)題 2:以下方法均可獲得該毫秒數(shù)。
Calendar.getInstance().getTimeInMillis();
System.currentTimeMillis();
Clock.systemDefaultZone().millis();
// Java 8
問(wèn)題 3:代碼如下所示。
Calendar time = Calendar.getInstance();
time.getActualMaximum(Calendar.DAY_OF_MONTH
問(wèn)題 4:利用 java.text.DataFormat 的子類(lèi)(如 SimpleDateFormat 類(lèi))中的format(Date)方法可將日期格式化。Java 8 中可以用java.time.format.DateTimeFormatter 來(lái)格式化時(shí)間日期,代碼如下所示。
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.Date;
class DateFormatTest {
? ? public static void main(String[] args) {
? ? ? ? SimpleDateFormat oldFormatter = new
? ? ? ? SimpleDateFormat("yyyy/MM/dd");
? ? ? ? Date date1 = new Date();
? ? ? ? System.out.println(oldFormatter.format(date1));
? ? ? ? // Java 8
? ? ? ? DateTimeFormatter newFormatter =
? ? ? ? DateTimeFormatter.ofPattern("yyyy/MM/dd");
? ? ? ? LocalDate date2 = LocalDate.now();
? ? ? ? System.out.println(date2.format(newFormatter));
? ? }
}
補(bǔ)充:Java 的時(shí)間日期 API 一直以來(lái)都是被詬病的東西,為了解決這一問(wèn)題,Java8 中引入了新的時(shí)間日期 API,其中包括 LocalDate、LocalTime、LocalDateTime、Clock、Instant 等類(lèi),這些的類(lèi)的設(shè)計(jì)都使用了不變模式,因此是線程安全的設(shè)計(jì)。