Tengo problemas para descubrir la forma correcta de reformatear/convertir campos de fecha en js.
Estoy tratando de crear un informe usando el transmisor Kafka ODF y el conector receptor y un js en el medio para manejar la transformación, desde un archivo EDR de entrada.
Ejemplo de informe O/P
MSISDN,DeleteReason,DeleteTime 12554564364661,3,2022-02-21T14:08:39.795ZFormato de informe esperado
MSISDN,DeleteReason,DeleteTime 12554564364661,3,20220221140839Nota: - Quiere transformar el campo DeleteTime a un formato diferente "YYYYMMDDhhmiss", actualmente YYYY-MM-DDTHH:MM:SS.MISZ .
Sección de transformación en el conector del fregadero
transforms: valueTransform transforms.valueTransform.type: "com.openet.odf.transformer.ValueTransform" transforms.valueTransform.script: "/opt/kafka/external-configuration/sink-hookpoint/valueTransform.js" eventTimestamp[or DeleteTime] es un campo de fecha entrante declarado como una cadena en el esquema. ejemplo: 2022-02-21T14:08:39.795Z
Guión js
valueTransform.js: | function onValueTransform(_schema, _value) { var SchemaAndValue = Java.type('org.apache.kafka.connect.data.SchemaAndValue') var Date = Java.type('java.util.Date') var d = new Date.parse(_value.get("eventTimestamp")) var year = d.getFullYear() var month = ('0' + (d.getMonth() + 1)).slice(-2) var day = ('0' + d.getDate()).slice(-2) var hours = ('0' + d.getHours()).slice(-2) var minutes = ('0' + d.getMinutes()).slice(-2) var seconds = ('0' + d.getSeconds()).slice(-2) var modified_delete_time = year + month + day + hours + minutes + seconds _value.put("eventTimestamp",modified_delete_time) return new SchemaAndValue(_schema, _value) }Intenté usar Date, SimpleDateFormat, etc., pero nada de eso funciona y obtiene diferentes errores con cada intento.
Gracias, Foro.
Pude usar Calendar y SimpleDateFormat para lograr los resultados deseados. Solución a continuación
valueTransform.js: | function onValueTransform(_schema, _value) { var SchemaAndValue = Java.type('org.apache.kafka.connect.data.SchemaAndValue') var Date = Java.type('java.util.Date') var SimpleDateFormat = Java.type('java.text.SimpleDateFormat') var Calendar = Java.type('java.util.Calendar') var sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss") var EventDate = sdf.parse(_value.get("eventTimestamp")) sdf=new SimpleDateFormat("yyyyMMddHHmmss") var cal = Calendar.getInstance() cal.setTime(EventDate) EventDate = cal.getTime() var formattedDate = sdf.format(EventDate) _value.put("eventTimestamp",formattedDate) return new SchemaAndValue(_schema, _value) }No hay nada razonable incorporado. Puede usar Moment Timezone para Moment.js en Javascript.
var actualDateTime = moment("2022-02-21T14:08:39.795Z"); var f = "YYYYMMDDhhmmss"; console.log(actualDateTime.format(f)) // By passing format into the format function to get it doneEn la mayoría de los casos, tratar con Fechas puede ser un proceso complicado.
Consideraría elegir una biblioteca de fechas, por ejemplo, https://www.npmjs.com/package/luxon .
Mi primera opción sería Moment.js, pero el proyecto está obsoleto.
Con Luxon, puede confiar en las utilidades de análisis y formato, algo así:
DateTime.fromISO('2022-02-23T08:30:00').toFormat('yyyyMMddhhmmss')