Используя встроенную функцию списка, вы можете сделать это
a
out:[[1, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
#Displaying the list
a.remove(a[0])
out:[[1, 1, 1, 1], [1, 1, 1, 1]]
# Removed the first element of the list in which you want altered number
a.append([5,1,1,1])
out:[[1, 1, 1, 1], [1, 1, 1, 1], [5, 1, 1, 1]]
# append the element in the list but the appended element as you can see is appended in last but you want that in starting
a.reverse()
out:[[5, 1, 1, 1], [1, 1, 1, 1], [1, 1, 1, 1]]
#So at last reverse the whole list to get the desired list
Если кому-либо это понадобится, если вам нужно преобразовать часовой пояс XMLGregorianCalendar
в текущий часовой пояс из UTC, то вам нужно всего лишь установить часовой пояс на 0
, а затем вызвать toGregorianCalendar()
- он останется тот же часовой пояс, но Date
знает, как его преобразовать в ваш, поэтому вы можете получить данные оттуда.
XMLGregorianCalendar xmlStartTime = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(
((GregorianCalendar)GregorianCalendar.getInstance());
xmlStartTime.setTimezone(0);
GregorianCalendar startCalendar = xmlStartTime.toGregorianCalendar();
Date startDate = startCalendar.getTime();
XMLGregorianCalendar xmlStartTime = DatatypeFactory.newInstance()
.newXMLGregorianCalendar(startCalendar);
xmlStartTime.setHour(startDate.getHours());
xmlStartTime.setDay(startDate.getDate());
xmlStartTime.setMinute(startDate.getMinutes());
xmlStartTime.setMonth(startDate.getMonth()+1);
xmlStartTime.setTimezone(-startDate.getTimezoneOffset());
xmlStartTime.setSecond(startDate.getSeconds());
xmlStartTime.setYear(startDate.getYear() + 1900);
System.out.println(xmlStartTime.toString());
Результат:
2015-08-26T12:02:27.183Z
2015-08-26T14:02:27.183+02:00
Преобразуйте Date в String и сделайте это с помощью SimpleDateFormat.
SimpleDateFormat readFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
readFormat.setTimeZone(TimeZone.getTimeZone("GMT" + timezoneOffset));
String dateStr = readFormat.format(date);
SimpleDateFormat writeFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Date date = writeFormat.parse(dateStr);
java.util.Calendar
- обычный способ обработки часовых поясов с использованием только классов JDK. Apache Commons имеет некоторые дополнительные альтернативы / утилиты, которые могут быть полезны. Заметка Edit Spong напомнила мне, что я слышал действительно хорошие вещи о Joda-Time (хотя я сам не использовал его).
BaseCalendar.Date cdate
, если она установлена. Взгляните на исходный код здесь . Вы не можете установить часовой пояс для объекта j.u.Date, кроме как изменить часовой пояс по умолчанию JVM, вызвав TimeZone.setDefault(TimeZone.getTimeZone("NEW_TIME_ZONE"));
. Таким образом, существует смещение часового пояса, и вы можете получить смещение, вызвав устаревший метод j.u.Date.getTimezoneOffset ()
– Thai Bui
8 January 2015 в 22:22
toString
, который применяет текущий часовой пояс JVM; снова игнорируя скрытый часовой пояс. Поэтому для краткости мы говорим, что java.util.Date не имеет часового пояса. Как искусство , это ложь, которая говорит правду.
– Basil Bourque
9 January 2015 в 06:34
TimeZone.setDefault
, вы not i> устанавливаете часовой пояс объекта java.util.Date - объект Date по-прежнему игнорирует свой скрытый часовой пояс, действуя эффективно в UTC. Вы повлияли бы на метод даты toString
. Установка по умолчанию изменяет часовой пояс JVM по умолчанию, который обычно устанавливается в часовом поясе операционной системы хоста. Этот вызов не рекомендуется , поскольку он влияет на весь код во всех потоках всех приложений, запущенных в этой JVM, и делает это «на лету», когда они выполняются. Будучи грубым и опасным, этот вызов следует рассматривать только как последнее средство.
– Basil Bourque
9 January 2015 в 06:41
equals
, hashcode
, getTime
..) Если вы посмотрите на метод equals
, он вызывает getTime()
, который вызывает getTimeImpl()
, который вызывает normalize()
, если свойство cdate
не нормировано. В методе normalize()
последнее условие if повторно вычисляет миллисекунды с 1/1/70 на основании сохраненной информации о часовом поясе, если часовой пояс cdate
отличается от часового пояса текущей среды JVM, на котором он запущен. (Взгляните на sun.util.calendar.AbstractCalendar getCalendarDate(long millis, CalendarDate date)
)
– Thai Bui
9 January 2015 в 19:27
Если вы должны работать только с обычными классами JDK, вы можете использовать это:
/**
* Converts the given <code>date</code> from the <code>fromTimeZone</code> to the
* <code>toTimeZone</code>. Since java.util.Date has does not really store time zome
* information, this actually converts the date to the date that it would be in the
* other time zone.
* @param date
* @param fromTimeZone
* @param toTimeZone
* @return
*/
public static Date convertTimeZone(Date date, TimeZone fromTimeZone, TimeZone toTimeZone)
{
long fromTimeZoneOffset = getTimeZoneUTCAndDSTOffset(date, fromTimeZone);
long toTimeZoneOffset = getTimeZoneUTCAndDSTOffset(date, toTimeZone);
return new Date(date.getTime() + (toTimeZoneOffset - fromTimeZoneOffset));
}
/**
* Calculates the offset of the <code>timeZone</code> from UTC, factoring in any
* additional offset due to the time zone being in daylight savings time as of
* the given <code>date</code>.
* @param date
* @param timeZone
* @return
*/
private static long getTimeZoneUTCAndDSTOffset(Date date, TimeZone timeZone)
{
long timeZoneDSTOffset = 0;
if(timeZone.inDaylightTime(date))
{
timeZoneDSTOffset = timeZone.getDSTSavings();
}
return timeZone.getRawOffset() + timeZoneDSTOffset;
}
Имейте в виду, что объекты java.util.Date
сами не содержат информацию о часовом поясе - вы не можете установить часовой пояс на объект Date
. Единственное, что содержит объект Date
, - это количество миллисекунд с момента «эпохи» - 1 января 1970 года, 00:00:00 UTC.
Как показывает ZZ Coder, вы устанавливаете часовой пояс на DateFormat
, чтобы указать, в какой часовой пояс вы хотите отображать дату и время.
long
, называемое fastTime
. Date.toString()
фактически использует Calendar
для интерпретации этого миллисекундного времени. Таким образом, печать Date
приводит к тому, что появляется i>, чтобы иметь (по умолчанию) часовой пояс, что приводит к понятным вопросам о том, как установить этот часовой пояс.
– David Carboni
11 July 2012 в 14:41
TimeZone.setDefault
довольно резкий, поскольку он влияет на всю JVM, влияет на все другие объекты и потоки. См. этот ответ для деталей, включая еще больше осложнений, если вы работаете с SecurityManager. Добавление еще большего количества осложнений: это поведение изменилось в разных версиях Java, как обсуждалось в this Question . – Basil Bourque 2 March 2014 в 12:53