我已经尝试转换该日期格式好几个小时了。我想让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:00
或Wed 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的更多信息。