Estou consumindo uma API e preciso enviar a data no seguinte formato: 2017-12-04T15:30:41-03:00. Como posso formatar uma data 2017-12-04 15:30:41 no formato mencionado anteriorme ?
Ola,
Use o simple date formate, https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssXXX");
GregorianCalendar gc = new GregorianCalendar();
String dateString = sdf.format(gc.getTime());
System.out.println(dateString);
No caso, estou consumindo a API em PHP.
no lugar de sdf.format use sdf.parse(dataRecebidaViaApi)
Você quis dizer que está usando PHP para consumir a API certo?
Nesse caso use a classe DateTime
Há formatos predefinidos que você pode usar, um muito parecido com esse que você quer é o DateTime::ATOM ou DateTime::ISO8601
Para formatar seria algo assim…
<?php
$data = new DateTime("2017-12-04 15:30:41");
echo $data->format(DateTime::ATOM);
Exatamente, estou consumindo a API com PHP.
Funcionou perfeitamente.
Só uma dúvida, eu me referia ao “-03:00” da data “2017-12-04T15:30:41-03:00” como fuso horário, isso está correto ?
Putz, 
Cara nem vi que era php, ja fui dando a solucao em java.
Sim, esse 3 é de GMT 3 / horário oficial de brasília 
O -03:00 é apenas um offset em relação ao horário central e pode variar para o mesmo lugar. Por exemplo, brasilia durante o horário de verão é -02:00.
O ideal é especificar o fuso horário que a sua data se encontra pelo identificador, e não pelo offset, por exemplo: America/Sao_Paulo.