Может кто-нибудь сказать мне, как преобразовать эту строку 2012-01-01T08:44:36+01:00
в 2012-01-01 08:44:36
в Java?Как конвертировать 2012-01-01T08: 44: 36 + 01: 00 в datetime (yyyy-MM-dd hh: mm: ss) в Java?
Благодаря
Может кто-нибудь сказать мне, как преобразовать эту строку 2012-01-01T08:44:36+01:00
в 2012-01-01 08:44:36
в Java?Как конвертировать 2012-01-01T08: 44: 36 + 01: 00 в datetime (yyyy-MM-dd hh: mm: ss) в Java?
Благодаря
Иногда самый простой лучше
String s = "2012-01-01T08:44:36+01:00"; // s2 = "2012-01-01 08:44:36" String s2 = s.substring(0,10) + ' ' + s.substring(12, 8);
Таким образом, может производить ошибки с индексами, которые могут стоять, как в вашем примере :-) Кроме того, в случае какой-то плохой строки вы будете тратить много времени, находя ошибка, потому что этот простой способ не имеет проверок ввода строки.
Правильные индексы:
String s2 = s.substring(0,10) + ' ' + s.substring(11, 19);
Если вы хотите работать с датой, как со строкой, я предпочитаю использовать RegXP:
// You can parse your xml output using regXp:
String s = "<root><date>2012-01-01T08:44:36+01:00</date></root>";
Pattern pattern = Pattern.compile("(.+)(T)(.+)([+-])");
Matcher matcher = pattern.matcher(s);
if (matcher.find()) {
System.out.println(matcher.group(1) + ' ' + matcher.group(3));
} else {
System.err.println("Bad date: " + s);
}
Скорость испытания:
public class tempClass {
static final String s = "2012-01-01T08:44:36+01:00".intern();
static String formattedDate = null;
static final int loop = 5 * 1000;
static final String[] patterns = new String[]{"yyyy-MM-dd'T'HH:mm:ss+01:00".intern()};
public static void main(String[] args) throws ParseException, InterruptedException {
testSimpleWay();
testRegXp();
testSimpleDateFormat();
testFastDateFormat();
}
private static void testRegXp() {
Pattern pattern = Pattern.compile("(.+)(T)(.+)([+-])");
Matcher matcher;
final long timeStamp = System.currentTimeMillis();
for (int i = 0; i < loop; i++) {
matcher = pattern.matcher(s);
if (matcher.find()) {
formattedDate = matcher.group(1) + ' ' + matcher.group(3);
} else {
System.err.println("Bad date: " + s);
}
}
System.out.println("Duration of RegXP: " + (System.currentTimeMillis() - timeStamp) + " ms.");
}
private static void testSimpleWay() {
long timeStamp = System.currentTimeMillis();
for (int i = 0; i < loop; i++) {
formattedDate = s.substring(0, 10) + ' ' + s.substring(11, 19);
}
System.out.println("Duration of Simple way: " + (System.currentTimeMillis() - timeStamp) + " ms.");
}
private static void testSimpleDateFormat() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
final long timeStamp = System.currentTimeMillis();
for (int i = 0; i < loop; i++) {
try {
formattedDate = simpleDateFormat.format((Date) DateUtils.parseDate(s, patterns));
} catch (ParseException ex) {
System.err.println("Bad date: " + s);
}
}
System.out.println("Duration of SimpleDateFormat: " + (System.currentTimeMillis() - timeStamp) + " ms.");
}
private static void testFastDateFormat() {
FastDateFormat fastDateFormat = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss");
final long timeStamp = System.currentTimeMillis();
for (int i = 0; i < loop; i++) {
try {
formattedDate = fastDateFormat.format((Date) DateUtils.parseDate(s, patterns));
} catch (ParseException e) {
System.err.println("Bad date: " + s);
}
}
System.out.println("Duration of FastDateFormat: " + (System.currentTimeMillis() - timeStamp) + " ms.");
}
Выход:
Duration of Simple way: 5 ms.
Duration of RegXP: 20 ms.
Duration of SimpleDateFormat: 114 ms.
Duration of FastDateFormat: 65 ms.
Используйте SimpleDateFormat
класс для форматирования даты.
String value = "2012-01-01T08:44:36+01:00";
String date = null;
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
try
{
Date d = format.parse(value);
date = format.format(d);
}
catch (ParseException ex)
{
System.out.println(ex);
}
return date
Более подробную информацию о http://docs.oracle.com/javase/1.4.2/docs/api/java/text/SimpleDateFormat.html
SimpleDateFormat ft = new SimpleDateFormat ("yyyy-MM-dd hh: mm: ss"); String time1 = ft.format (время); Я пробовал с этим, но безуспешно. Это исключает исключение – Dejan
'SimpleDateFormat format = new SimpleDateFormat (" yyyy-MM-dd hh: mm: ss "); try { Дата d = формат.parse (значение); this.value = format.getCalendar(); this.length = значение.length(); } catch (ParseException ex) { System.out.println (ex); } ' –
Спасибо Сунил за ответ. Возврат из этого кода «d»? Потому что мне нужно вернуть его в виде строки?Будет ли это достаточно "d.toString();" – Dejan
Но помните, что, SimpleDateFormat не поточно-. Вы можете использовать FastDateFormat от апача: FastDateFormat
Использование:
// create a formatter that simply prints the year and month
FastDateFormat formatter =
new FastDateFormat("yyyy-MM",
TimeZone.getDefault(),
Locale.getDefault());
// output equals "2012-02"
String output = formatter.format(new Date());
Синтаксический Дата:
FastDateFormat formatter = FastDateFormat.getInstance("yyyy-MM");
String s = "2012-01-01T08:44:36+01:00";
try {
Object o = DateUtils.parseDate(s, new String[]{"yyyy-MM-dd'T'HH:mm:ss+01:00"});
// output equals "2012-01"
String output = formatter.format(o);
} catch (ParseException e) {
System.err.println("Bad date: " + s);
}
Иногда самый простой лучше
String s = "2012-01-01T08:44:36+01:00";
// s2 = "2012-01-01 08:44:36"
String s2 = s.substring(0,10) + ' ' + s.substring(11, 19);
Спасибо за ответ, это полезно, но мой коллега говорит мне, что это плохо для производительности системы, потому что в течение времени будет много мертвых строк в памяти – Dejan
Если вы беспокоитесь о производительности, используя SimpleDateFormat или регулярные выражения создает гораздо больше объектов и намного медленнее. –
См: http://stackoverflow.com/questions/2201925 –
возможно дубликат [Преобразование ISO8601-совместимого строки в java.util.Date] (http://stackoverflow.com/questions/2201925/converting -iso8601-compliant-string-to-java-util-date) – Jacob