today from create java date

from - java date today



¿Cuándo desaparecerán los métodos API marcados como "obsoletos"? (9)

Estoy revisando el código de un cambio que acaba de hacer uno de mis compañeros de trabajo, y agregó un montón de llamadas a Date.toMonth (), Date.toYear () y otros métodos de fecha en desuso. Todos estos métodos fueron desaprobados en JDK 1.1, pero él insiste en que está bien usarlos porque aún no se han ido (estamos usando JDK 1.5) y estoy diciendo que podrían desaparecer en cualquier momento y que debería usar Métodos de calendario. ¿Realmente Sun ha dicho cuándo estas cosas se van a ir, o "@deprecated" solo significa que pierdes puntos de estilo?


Bueno, "aún no se ha ido" y "nunca irse" son dos cosas muy diferentes. Ese es el punto de desaprobación. Pueden irse con cualquier lanzamiento futuro. Usarlos es una propuesta a su propio riesgo. Solo tenga en cuenta que una versión futura del JDK puede dejar su código en un estado inutilizable.


Características desaprobadas características que son reemplazadas y deben evitarse. Aunque permanecen en el JDK, se desalientan porque hay mejores métodos disponibles. Los métodos se dejan en la API para admitir la compatibilidad con versiones anteriores, pero en general se deben evitar ya que podrían eliminarse en versiones futuras de la API.

Técnicamente está bien usar métodos desaprobados, pero en general, la razón por la que se desaprobó en primer lugar fue que se desarrolló una API mejor / más rápida / limpia.


Definitivamente he visto desaparecer las funciones obsoletas, desde las versiones anteriores de Java hasta las actuales (comencé con 1.1, y algunas cosas claramente NO FUNCIONARON en 1.4).

Otros lenguajes manejan la depreciación de manera diferente: Python se ha conocido en el pasado, por ejemplo, para eliminar la funcionalidad en desuso después de solo una o dos versiones.


El sol tiende a ser extremadamente paranoico cuando se trata de cambios que afectan la compatibilidad con versiones anteriores, por lo que no esperaría ver que los métodos desaparezcan pronto.

Pero los métodos obsoletos podrían desaparecer en cualquier momento en el futuro, y por lo general son obsoletos por alguna razón, ya sea porque no son confiables, porque tienen efectos secundarios desagradables o simplemente porque hay una manera mejor o más elegante de hacer las cosas. El JavaDoc para el método normalmente detallará cuál de estos es el caso y cuál es la forma aceptable de llevar a cabo la misma operación estos días. Con bastante frecuencia, el método en desuso se habrá reemplazado por una implementación que llame al método ''correcto'' de todos modos, por lo que simplemente agrega un nivel de indirección.

También tendrá muchas advertencias de compilación si utiliza estos métodos, lo que podría ser motivo suficiente para evitarlos en sí mismo ...


En cuanto a las API, ... no se especifica que se eliminarán en el corto plazo.

Incompatibilidades en J2SE 5.0 (desde 1.4.2) :

Compatibilidad de fuente

[...]
En general, la política es la siguiente, a excepción de cualquier incompatibilidad que se detalla a continuación:

Las API obsoletas son interfaces que solo son compatibles con la compatibilidad con versiones anteriores. El compilador javac genera un mensaje de advertencia cada vez que se usa uno de estos, a menos que se use la opción de línea de comandos -nowarn. Se recomienda que los programas se modifiquen para eliminar el uso de API desaprobadas, aunque no hay planes actuales para eliminar dichas API , con la excepción de JVMDI y JVMPI, del sistema.

Incluso en sus API de Cómo y cuándo Cuándo se descarta , no se dice nada sobre una política relacionada con la eliminación de las API desaprobadas ...


No se van a ir. Dicho esto, generalmente están en desuso porque a) son peligrosos ala Thread.stop (), o b) hay una forma mejor o al menos más aceptada de hacerlo. Por lo general, el método obsoleto javadoc le dará una pista sobre la mejor manera. En tu caso, Calendar es la forma recomendada de hacerlo.

Si bien es concebible que sean eliminados en algún momento en el futuro, yo no apostaría. Si alguien alguna vez usa Java, probablemente sea lo primero que vaya ...


Si los métodos obsoletos desaparecieron, podrían romper el código existente.

Si bien mantener una API limpia es importante, los métodos obsoletos no se están poniendo en el camino de nadie. Claro, ahora hay mejores formas de hacer las cosas, entonces los nuevos métodos reemplazan a los viejos. Pero no se obtendría ningún beneficio (además de una API más limpia) al eliminar los viejos.

Piense en "obsoleto" como que significa "obsoleto", pero no necesariamente "en la tabla de cortar".


Un problema es que verá muchas advertencias del compilador sobre el uso de métodos obsoletos. Si también usa deprecations para eliminar gradualmente su propio código, las advertencias del compilador se perderán en el ruido y perderán importancia.


Tengo una mejor recomendación: en lugar de decirle que use Calendar , debe cambiar a JodaTime o a la versión previa de JSR-310 . Algunos métodos en java.util.Date pueden estar en desuso, pero en mi opinión toda la clase debe estar en desuso, junto con el Calendar . Los desarrolladores de JSR-310 parecen estar de acuerdo, aunque dudo que puedan morder la bala y desaprobarla.

Sin ningún orden en particular, esto es lo que está mal con Date :

  • Su representación interna es milisegundos desde la época; por lo tanto, no puede representar fechas anteriores a la época.

  • Todos sus métodos útiles (por ejemplo, toString ) primero normalizan la fecha de acuerdo con la zona horaria local. Al trabajar con instancias de Date UTC, esto puede ser realmente molesto; estás obligado a usar Calendar o cometerás errores muy graves.

  • Calendar . Solo apesta. Podría ganar el premio al peor API de la historia.

  • Siempre representa un instante en el tiempo . No hay manera de representar días específicos o años específicos. No hay manera de representar valores de fechas de zona horaria.

  • Casi no tiene métodos útiles. Véase, por ejemplo, la interfaz fluida de JodaTime para hacer aritmética de fechas.

  • Debería haber sido nombrado Datetime y Datetime , teniendo en cuenta que es uno.