如何使用Date
将HH:mm+-GMT
打印成格式SimpleDateFormat
?
"EEE, d MMM yyyy HH:mm:ss Z" Wed, 4 Jul 2001 12:08:56 -0700
"yyMMddHHmmssZ" 010704120856-0700
我怎么能打印:13:01-7
以上的例子?那么,用最短的可能值表示时区偏移量?
答案 0 :(得分:2)
如果您使用的是Java 7,则可以使用X标志来获取时区。
Java 7 SimpleDateFormat javadoc:
X时区ISO 8601时区-08; -0800; -08:00
答案 1 :(得分:1)
尝试以下:
import java.util.Date;
import java.text.SimpleDateFormat;
class array05{
public static void main(String[] args){
SimpleDateFormat sf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss Z");
System.out.println(sf.format(new Date()));
}
}
对我而言,它一直在打印Вт, 12 ноя 2013 14:22:24 +0200
答案 2 :(得分:0)
了解计算机时间的工作原理非常重要。有了这个说我同意,如果创建一个API来帮助您像实时一样处理计算机时间,那么它应该以允许您像实时一样对待它的方式工作。在大多数情况下,情况确实存在,但有一些重要的疏忽需要引起注意。
无论如何我离题!如果您有UTC偏移(最好在UTC中工作而不是GMT偏移),您可以计算时间(以毫秒为单位)并将其添加到时间戳。请注意,SQL时间戳可能与Java时间戳不同,因为计算时间的过程并不总是相同的 - 这取决于数据库技术和操作系统。
我建议您使用System.currentTimeMillis()作为时间戳,因为这些可以在java中更一致地处理,而不必担心将SQL时间戳转换为Java Date对象等。
要计算偏移量,您可以尝试以下方法:
Long gmtTime =1317951113613L; // 2.32pm NZDT
Long timezoneAlteredTime = 0L;
if (offset != 0L) {
int multiplier = (offset*60)*(60*1000);
timezoneAlteredTime = gmtTime + multiplier;
} else {
timezoneAlteredTime = gmtTime;
}
Calendar calendar = new GregorianCalendar();
calendar.setTimeInMillis(timezoneAlteredTime);
DateFormat formatter = new SimpleDateFormat("dd MMM yyyy HH:mm:ss z");
formatter.setCalendar(calendar);
formatter.setTimeZone(TimeZone.getTimeZone(timeZone));
String newZealandTime = formatter.format(calendar.getTime());
我希望这有用!
答案 3 :(得分:-1)
试试这个,如你所引用的那样最短,
long millis = new Date().getTime();
System.out.println(SimpleDateFormat.getTimeInstance(SimpleDateFormat.SHORT).format(millis));