我想将该字符串转换为DateFormat
。在我的ListView
中显得有些奇怪。
这是代码
String nameb= jo.getString("name");
String dateb= jo.getString("date");
String hourb= jo.getString("hour");
HashMap<String, String> item = new HashMap<>();
item.put("name", nameb);
item.put("date", dateb);
item.put("hour",hourb);
list.add(item);
}
} catch (JSONException e) {
e.printStackTrace();
}
adapter = new SimpleAdapter(this,list,R.layout.activity_randevular,
new String[]{"name","date","hour"},new int[]{R.id.name,R.id.date,R.id.hour});
listView.setAdapter(adapter);
loading.dismiss();
首先,我在GoogleSheet上有一些字符串,其中一个指示一个小时,例如“ 14:00”。在GoogleSheet上看起来很完美,但是在ListView
中看起来像是“ 2001-07-04T12:08:56.235-07:00”,依此类推。
我希望它包含小时和分钟。
答案 0 :(得分:2)
使用现代的 java.time 类OffsetDateTime
,LocalTime
和DateTimeFormatter
,并使用Locale
进行本地化。
OffsetDateTime // Represent a moment as a date and time-of-day with an offset of hours-minutes-seconds ahead of or behind UTC.
.parse( "2001-07-04T12:08:56.235-07:00" ) // Standard ISO 8601 strings can be parsed directly, without you needing to specify a formatting pattern. Returns an `OffsetDateTime` object.
.toLocalTime() // Extract just the time-of-day portion, omitting the date and the offset-from-UTC. Returns a `LocalTime` object.
.format( // Generate text to represent the time-of-day value held in this `LocalTime` object.
DateTimeFormatter // Class to control generate text from a date-time object.
.ofLocalizedTime( // Ask `DateTimeFormatter` to automatically localize the presentation formatting of the text.
FormatStyle.SHORT // Specify how long or abbreviated the text should be.
) // Returns a `DateTimeFormatter` object.
.withLocale( // Specify the locale to use in localization, to determine (a) the human language to use in translation, and (b) the cultural norms to decide issues such as capitalization, abbreviation, punctuation, order of elements.
Locale.US
) // Returns another `DateTimeFormatter` object. The java.time class use the immutable objects pattern, returning a fresh object base on the original’s values rather than changing (“mutating”) the original.
) // Returns a `String`.
12:08 PM
像这样的“ 2001-07-04T12:08:56.235-07:00”
该文本暂时以标准ISO 8601格式显示。
现代的 java.time 类在解析/生成文本时默认使用那些标准格式。
OffsetDateTime odt = OffsetDateTime.parse( "2001-07-04T12:08:56.235-07:00" ) ;
我希望它由小时和分钟组成。
您要显示通过同一offset-from-UTC看到的时间吗?您可以看到,here的偏移量-07:00
(比世界标准时间晚7小时)可能来自北美西海岸的时区,例如America/Vancouver
或America/Los_Angeles
。
如果是这样,请提取时间。
LocalTime lt = odt.toLocalTime() ;
然后生成一个表示该LocalTime
对象的值的字符串。通常最好让 java.time 为您自动本地化。
Locale locale = Locale.US ;
DateTimeFormatter f = DateTimeFormatter.ofLocalizedTime( FormatStyle.SHORT ).withLocale( locale ) ;
String output = lt.format( f );
12:08 PM
java.time框架已内置在Java 8及更高版本中。这些类取代了麻烦的旧legacy日期时间类,例如java.util.Date
,Calendar
和SimpleDateFormat
。
要了解更多信息,请参见Oracle Tutorial。并在Stack Overflow中搜索许多示例和说明。规格为JSR 310。
目前位于Joda-Time的maintenance mode项目建议迁移到java.time类。
您可以直接与数据库交换 java.time 对象。使用符合JDBC driver或更高版本的JDBC 4.2。不需要字符串,不需要java.sql.*
类。
在哪里获取java.time类?
答案 1 :(得分:0)
您必须将timestamp
转换为日期才能获取时间。输入格式是timestamp
在数据源上的格式。输出格式是如何显示给用户。
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
SimpleDateFormat outputFormat = new SimpleDateFormat("h:mm a");
try {
String nameb= jo.getString("name");
String dateb= jo.getString("date");
String hourb= jo.getString("hour");
Date date = inputFormat.parse(hourb);
HashMap<String, String> item = new HashMap<>();
item.put("name", nameb);
item.put("date", dateb);
item.put("hour", outputFormat.format(date));
list.add(item);
} catch (ParseException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}