为什么日期对象的字符串格式在不同区域的不同设备上有所不同?

问题描述:

所以,我在2个地点有2个设备。这就是我如何解析我从一个自定义的消息对象获取时间:为什么日期对象的字符串格式在不同区域的不同设备上有所不同?

long mtime = message.getEpochTime(); 
Date messageTime = new Date(mtime * 1000); 
String dateString = messageTime.toString(); 
String datePrint = dateString.substring(0, dateString.length()-12); 
timeTextView.setText(datePrint); 

的日期和时间是在两个位置正确(调整到本地时区)。但是,格式是不同的:

在一个手机格式为Thu Jun 22 22:31,另一个显示时间为Fri Jun 23 08:31:52 GM

这究竟是为什么?两个位置的日期字符串的长度应该相同。

+1

由于不同的区域设置格式的日期不同。试试[日本](https://stackoverflow.com/questions/20174225/convert-japans-date-format-2013%E5%B9%B411%E6%9C%8824%E6%97%A5-to-normal-date -format-2013-11-24)(例如), –

+0

您是否尝试过搜索引擎?例如,您是否找到[All about java.util.Date](https://codeblog.jonskeet.uk/2017/04/23/all-about-java-util-date/)? –

+0

有趣的是,一台设备将秒数留出,另一台显示它们。 –

您可以设置任何格式的显示日期,你想要的。例如:

SimpleDateFormat ENGLISH_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd", 
      Locale.ENGLISH); 
String datePrint = ENGLISH_DATE_FORMAT.format(messageTime); 
timeTextView.setText(datePrint); 

The documentatation of Date.toString()说,它应该产生的形式dow mon dd hh:mm:ss zzz yyyy

zzz是时区。它没有说明它使用的是哪个时区,并且对象在其中没有时区。常见的经验是它通常使用设备的默认时区。这甚至意味着您可以更改设备的时区设置,然后相同的对象将以不同的方式显示。这对许多人来说是一个惊喜。

根据文档遗漏秒,作为您的设备之一,似乎是不正确的。