Linux如何转换日期格式:2018年4月20日星期三格林尼治标准时间19:56:52到2018年4日星期三19:56:



我已经尝试转换该日期格式好几个小时了。我想让rif离开GMT,换成我的时区,即+02:00

awk -F, -v currentDate=`TZ="Europe/Paris" date -d  "23 hours ago" +%s`'{OFS=",";"date -d" $1" +%s"

1美元=2018年4月20日星期三19:56:52 GMT

我一直得到与输出相同的输入,它似乎忽略了TZ

我当前的时区是+2h,所以要么把它附加到日期上代替GMT,要么把日期转换为本地时间。

预期结果=Wed 20 Apr 2018 19:56:52+02:00Wed 20 Apr 2018 21:56:52

$ TZ="Europe/Paris" awk 'BEGIN{"date -d "Wed 20 Apr 2018 19:56:52 GMT"" | getline; print}'
Fri Apr 20 21:56:52 CEST 2018

我认为在这种情况下不需要awk:

~$ set - "Wed 20 Apr 2018 19:56:52 GMT"
~$ echo "$1"
Wed 20 Apr 2018 19:56:52 GMT
~$ TZ=Europe/Paris date -d "$1" +"%a %d %b %Y %H:%M:%S%:z"
Fri 20 Apr 2018 21:56:52+02:00
~$ TZ=Europe/Paris date -d "$1" +"%a %d %b %Y %H:%M:%S"
Fri 20 Apr 2018 21:56:52

2018年4月20日星期三19:56:52 GMT为星期五

您的日期-时间字符串Wed 20 Apr 2018 19:56:52 GMT是错误的,因为20 Apr 2018 19:56:52 GMT不是星期三;那是星期五。

2018年4月20日(星期五(19:56:52 GMT=2018年4月下周五21:56:52+02:00

您在问题中提到的预期结果令人困惑,因为Fri 20 Apr 2018 19:56:52 GMT=Fri 20 Apr 2018 21:56:52+02:00。计算很简单:从日期时间中减去偏移值,得到等效的GMT(或UTC(日期时间。

既然您已经用java标记了这个问题,下面给出的是使用java:的解决方案

import java.time.OffsetDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
public class Main {
public static void main(String[] args) {
String strDateTime = "Fri 20 Apr 2018 19:56:52 GMT";
DateTimeFormatter dtfInput = DateTimeFormatter.ofPattern("EEE d MMM u H:m:s O", Locale.ENGLISH);
OffsetDateTime odtGmt = OffsetDateTime.parse(strDateTime, dtfInput);
OffsetDateTime odtOffsetTwoHrs = odtGmt.withOffsetSameInstant(ZoneOffset.of("+02:00"));
System.out.println(odtOffsetTwoHrs);
// Output in a custom format
DateTimeFormatter dtfOutput = DateTimeFormatter.ofPattern("EEE d MMM u H:m:sXXX", Locale.ENGLISH);
System.out.println(odtOffsetTwoHrs.format(dtfOutput));
}
}

输出:

2018-04-20T21:56:52+02:00
Fri 20 Apr 2018 21:56:52+02:00

在线演示

跟踪:日期时间了解有关现代日期时间API的更多信息。

最新更新