Vis*_*shi 16 java android android-date
我是Android的新手,我目前面临的问题是获得时区的当前时间.
我以"GMT-7"格式得到时区,即字符串.我有系统时间.
有没有一种干净的方法来获得上述时区的当前时间?任何帮助表示赞赏.谢谢,
编辑:尝试这样做:
public String getTime(String timezone) {
Calendar c = Calendar.getInstance();
c.setTimeZone(TimeZone.getTimeZone(timezone));
Date date = c.getTime();
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
String strDate = df.format(date);
return c.getTime().toString();
}
Run Code Online (Sandbox Code Playgroud)
Vis*_*shi 21
我让它像这样工作:
TimeZone tz = TimeZone.getTimeZone("GMT+05:30");
Calendar c = Calendar.getInstance(tz);
String time = String.format("%02d" , c.get(Calendar.HOUR_OF_DAY))+":"+
String.format("%02d" , c.get(Calendar.MINUTE))+":"+
. String.format("%02d" , c.get(Calendar.SECOND))+":"+
. String.format("%03d" , c.get(Calendar.MILLISECOND));
Run Code Online (Sandbox Code Playgroud)
Bas*_*que 12
与Java和第三方Joda-Time库捆绑在一起的旧日期时间类已被Java 8及更高版本中内置的java.time框架所取代.这些类取代了旧的麻烦的日期时间类,如java.util.Date.请参阅Oracle教程.大部分java.time功能都在ThreeTen- Backport中反向移植到Java 6和7,并进一步适用于ThreeTenABP中的 Android .
顺便说一句,永远不要用一个小时的数字来表示与UTC的偏移量-7,因为这是非标准的,并且与各种协议和库不兼容.始终用零填充第二个数字,例如-07.
如果您拥有的只是偏移而不是时区,请使用OffsetDateTime该类.
ZoneOffset offset = ZoneOffset.ofHours( -7 );
OffsetDateTime odt = OffsetDateTime.now( offset );
String output1 = odt.toLocalTime().toString();
System.out.println( "Current time in " + offset + ": " + output1 );
Run Code Online (Sandbox Code Playgroud)
当前时间-07:00:19:41:36.525
如果您有一个全时区,这是一个偏移量加上一组用于处理夏令时(DST)等异常的规则,而不是仅仅是从UTC的偏移量,请使用ZonedDateTime该类.
ZoneId denverTimeZone = ZoneId.of( "America/Denver" );
ZonedDateTime zdt = ZonedDateTime.now( denverTimeZone );
String output2 = zdt.toLocalTime().toString();
System.out.println( "Current time in " + denverTimeZone + ": " + output2 );
Run Code Online (Sandbox Code Playgroud)
美国/丹佛当前时间:20:41:36.560
请参阅Ideone.com中的此代码.
您可以在Android中使用Joda-Time 2.7.使日期时间工作更容易.
DateTimeZone zone = DateTimeZone.forID ( "America/Denver" );
DateTime dateTime = new DateTime ( zone );
String output = dateTime.toLocalTime ().toString ();
Run Code Online (Sandbox Code Playgroud)
转储到控制台.
System.out.println ( "zone: " + zone + " | dateTime: " + dateTime + " | output: " + output );
Run Code Online (Sandbox Code Playgroud)
跑的时候......
区:美国/丹佛| dateTime:2016-07-11T20:50:17.668-06:00 | 输出:20:50:17.668
我强烈建议不要按时间跟踪count-since- epoch.但是如果有必要,你可以通过调用a上的方法来提取Joda-Time的内部毫秒 - 自纪元(Unix时间,1970年第一时刻).getMillisDateTime
请注意使用64位long而不是32位int 基元类型.
在java.time中.请记住,您可能会丢失数据,因为java.time的分辨率高达纳秒.从纳秒到毫秒意味着截断一个小数秒的六位数(3位为毫秒,9位为纳秒).
long millis = Instant.now ().toEpochMilli ();
Run Code Online (Sandbox Code Playgroud)
在Joda-Time.
long millis = DateTime.now( denverTimeZone ).getMillis();
Run Code Online (Sandbox Code Playgroud)
ara*_*ran 11
Calendar cal = Calendar.getInstance();
TimeZone tz = cal.getTimeZone();
Log.d("Time zone","="+tz.getDisplayName());
Run Code Online (Sandbox Code Playgroud)
试试这个:
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
df.setTimeZone(TimeZone.getTimeZone("YOUR_TIMEZONE"));
String strDate = df.format(date);
Run Code Online (Sandbox Code Playgroud)
YOUR_TIMEZONE可能类似于:GMT,UTC,GMT-5等.
小智 5
将时区设置为格式化程序,而不是日历:
public String getTime(String timezone) {
Calendar c = Calendar.getInstance();
Date date = c.getTime(); //current date and time in UTC
SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
df.setTimeZone(TimeZone.getTimeZone(timezone)); //format in given timezone
String strDate = df.format(date);
return strDate;
}
Run Code Online (Sandbox Code Playgroud)
是的你可以。通过调用TimeZonesetDefault()方法。
public String getTime(String timezone) {
TimeZone defaultTz = TimeZone.getDefault();
TimeZone.setDefault(TimeZone.getTimeZone(timezone));
Calendar cal = Calendar.getInstance();
Date date = cal.getTime();
String strDate = date.toString();
// Reset Back to System Default
TimeZone.setDefault(defaultTz);
return strDate;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
41240 次 |
| 最近记录: |