@Specialization public RubyBasicObject timeDecompose(VirtualFrame frame, RubyTime time) { CompilerDirectives.transferToInterpreter(); final DateTime dateTime = time.getDateTime(); final int sec = dateTime.getSecondOfMinute(); final int min = dateTime.getMinuteOfHour(); final int hour = dateTime.getHourOfDay(); final int day = dateTime.getDayOfMonth(); final int month = dateTime.getMonthOfYear(); final int year = dateTime.getYear(); int wday = dateTime.getDayOfWeek(); if (wday == 7) { wday = 0; } final int yday = dateTime.getDayOfYear(); final boolean isdst = false; final String envTimeZoneString = readTimeZoneNode.executeRubyString(frame).toString(); String zoneString = org.jruby.RubyTime.zoneHelper(envTimeZoneString, dateTime, false); Object zone; if (zoneString.matches(".*-\\d+")) { zone = nil(); } else { zone = createString(zoneString); } final Object[] decomposed = new Object[] {sec, min, hour, day, month, year, wday, yday, isdst, zone}; return createArray(decomposed, decomposed.length); }