如何不将日期和时间转换为任何时区

时间:2017-03-20 13:17:33

标签: android asp.net-web-api android-webservice

我正在访问Dot net Web服务并使用Ksoap库,因为我的Web服务是基于Soap的。

基本上我想保存日期并在列表中显示它们。我不希望将日期转换为任何特定区域或时区。

我来自服务的日期有以下模式请举例说明三个不同的字段。

  

患者DOB = 1974-05-18T00:00:00

     

收集日期= 2016-07-27T11:00:00

     

附件上传日期= 2016-09-28T10:19:23.48

我正在使用以下方法转换它们

public static Date convertStringToDate(String date,String dateFormat)throws Exception {
    Date output = null;
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
    try {
        simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
        output = simpleDateFormat.parse(date);
    } catch (ParseException e) {
        throw  e;
    }
    return output;

}

其中dateFormat是" yyyy-MM-dd"而date可以是上面例子中显示的任何字符串。

问题:

1>当我使用该方法转换日期时,我有时会获得准确的时间和日期 2 - ;有时我观察到时间略有变化,比如2到7小时的时间变化。这是由于时区转换 3 GT;有时我观察到一天的转变。假设转换后来自服务器的日期是 2016-09-28T10:19:23.48 ,它变成2016-09-27给我。

  

什么错了?我怎样才能简单地显示日期,因为它来自Web服务我怎么能得到它,除了直接在字符串中保存日期并通过拆分显示这些字符串。

请帮帮我。

更新

我正在将我的日期对象转换回字符串,以便按以下方式在UI上显示

 public static String convertDateToString(Date date,String dateFormat)throws Exception {
    String output = "";
    try {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(dateFormat);
        simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
    output = simpleDateFormat.format(date);
    } catch (Exception e) {
        throw  e;
    }
    return output;
}

2 个答案:

答案 0 :(得分:0)

要实现这一点,您需要知道服务器的实际时区和日期格式。如果你已经知道了,那么以下代码段将是有用的

def labelFileBatchProcessor(batch_size, num_epochs=None, what_set="training"):
if what_set == "training":
    inputCsv = ["./data/BDRW_train/BDRW_train_1/labels.csv"]
elif what_set == "validation":
    inputCsv = ["./data/BDRW_train/BDRW_train_2/labels.csv"]
labelFile_queue = tf.train.string_input_producer(inputCsv, num_epochs=1, shuffle=False)

image_name, image_class = labelFileInit(labelFile_queue)
min_after_dequeue = 50
capacity = min_after_dequeue + 3 * batch_size

filenames = [TRAINING_DIR + image_name + ".jpg"]

files_training = tf.train.string_input_producer(filenames, name="CSVFilenames",  shuffle=False)
images = build_images(files_training)

image_name_batch, image_class_batch, images, filenames2 = tf.train.shuffle_batch(
    [image_name, image_class, images, filenames], batch_size=batch_size, capacity=capacity,
    min_after_dequeue=min_after_dequeue, allow_smaller_final_batch=True)

return image_name_batch, image_class_batch, images, filenames2

答案 1 :(得分:0)

在日期格式上设置时区会为时间戳添加偏移量。并且您的服务器的时间格式不包含任何时区。

删除第simpleDateFormat.setTimeZone(TimeZone.getTimeZone("UTC"));

通常只有在想要考虑区域设置之间的差异时才需要设置时区。