我正在解析Web服务返回的一些XML。字符串:2015-12-24T12:00:00
位于fromTimestamp
,没有时区。 “geniuses”(我不是那个意思)在几分钟内将时区信息保存在XML中的自己的字段中。所以300
表示GMT + 05:00。
我一直在阅读很多关于NSDate
和所有这些时区的内容,我知道NSDate
并不关心时区,那就是NSDateFormatter
工作。
但是,为了“转换”没有时区的时间戳,以便NSDate中的值表示GMT时间,我将GMT+05:00
添加到字符串中,使其变为2015-12-24T12:00:00 +05:00
。这是必须做的正确吗?在从字符串转换为日期时不添加时区,NSDate
认为该值是GMT时间?这是我不了解的部分。仅仅转换没有该时区信息的字符串是错误的,因为NSDate
将无法从NSDate
内的值中减去5小时?那是对的吗?我很难解释它。
答案 0 :(得分:1)
设置日期格式化程序的时区可能更简单 明确。示例(为简洁起见省略了错误检查):
function headcheese() { ?>
<script type=”text/JavaScript”>
var current_user_id = '<?php echo get_current_user_id(); ?>';
</script>
<?php
}
add_action('wp_head', 'headcheese');
答案 1 :(得分:1)
您的评估是正确的,您的解决方案是两种可能的解决方案之一。
要确保将日期字符串正确转换为NSDate
,您可以执行以下两项操作之一:
任何一种方法都会为您提供正确的NSDate
。
更新:我的第二种方法在Martin R的答案中显示。
答案 2 :(得分:0)
我发现将Martin的方法包装为String类的扩展更为方便。它还为它加上当前时间戳,并在调试器输出中写入文本。
迅速5:
"Hello world".log()
2019-09-05 12:18:10你好世界
extension String {
func log() {
let fmt = DateFormatter()
fmt.dateFormat = "yyyy-MM-dd' 'HH:mm:ss"
let formattedString = "\(fmt.string(from: Date())) \(self)"
print(formattedString)
let log = URL(fileURLWithPath: "log.txt")
do {
let handle = try FileHandle(forWritingTo: log)
handle.seekToEndOfFile()
handle.write((formattedString+"\n").data(using: .utf8)!)
handle.closeFile()
} catch {
print(error.localizedDescription)
do {
try self.data(using: .utf8)?.write(to: log)
} catch {
print(error.localizedDescription)
}
}
}
}