Hemos estado indagado en todo el mundo on line para traerte la solución para tu problema, si continúas con alguna inquietud déjanos tu pregunta y te responderemos con mucho gusto.
Solución:
No hiciste lo mismo en ambos ejemplos:
String foo(Date input)
// your first example
return DateTime.newInstance(
input.year(), input.month(), input.day()
).format('yyyy-MM-dd');
String bar(Date input)
// your second example
Datetime output = input;
// Type Coercion ^^^^^
return output.format('yyyy-MM-dd');
String baz(Date input)
// another approach
return DateTime.newInstance(
input, Time.newInstance(0,0,0,0)
).format('yyyy-MM-dd');
system.debug(foo(Date.today()));
system.debug(bar(Date.today()));
system.debug(baz(Date.today()));
En tu primer ejemplo, usas foo
pero en tu segundo, usas bar
. Que haces bar
se llama Type Coercion
donde asignas un Date
a un Datetime
. Eso le da un Time
en vez de (0,0,0,0)
pero un Time Zone
de GMT
. Entonces también podrías arreglar bar
mediante el uso formatGmt
:
String qux(Date input)
// your second example rewritten
Datetime output = input;
return output.formatGmt('yyyy-MM-dd');
// ^^^
También podría pensar en su barra original como equivalente a un ligero cambio en baz
:
String quux(Date input)
Datetime output = Datetime.newInstanceGmt(input, Time.newInstance(0,0,0,0));
// now output is the same as it was in `bar`
return output.format('yyyy-MM-dd');
Tienes el Datetime
en el GMT
Zona horaria, por lo que debe usar formatGmt
:
String garply(Date input)
Datetime output = Datetime.newInstanceGmt(input, Time.newInstance(0,0,0,0));
// now output is the same as it was in `bar`
return output.formatGmt('yyyy-MM-dd');
// ^^^
* ¿Qué hay después de Baz?
Para dar formato a un objeto Fecha a AAAA-MM-DD, solo necesita una línea:
String.valueOf(dateObject);
Recuerda algo, que tienes la capacidad de parafrasear tu experiencia si te ayudó.