- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试开发一个应用程序,该应用程序将使用生成的 Url 路径从 Web 服务器获取文件。
Web 服务器上每秒都会创建一个新文件,我正在尝试访问该文件并将其显示在 PictureBox 中(旧文件不会被删除)。
我遇到了一些问题,服务器返回了 404
错误,但我不知道为什么。
该应用程序似乎无法使用生成的图像源 Url 下载文件,但是当我在网络浏览器(例如 Chrome、Internet Explorer)中访问生成的链接时,它工作正常。
在 URL 格式不正确的过程中,我也遇到了一些问题。
尝试 1:我尝试使用 URl 生成器输出的字符串来下载文件。 URl 必须采用日期格式:东京标准时间的 yyyyMMdd/yyyyMMddHHmmss
。生成这部分工作正常,没有出现任何问题。这是我的代码:
' Convert the time to Tokyo Standard Time
Dim japanTime = System.TimeZoneInfo.ConvertTime(Now, TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time"))
'Convert date to url that can be used in the Monitor url
Dim jTime_url As String = Convert.ToDateTime(japanTime.ToString()).ToString("yyyyMMdd/yyyyMMddHHmmss")
'BYTE ARRAY HOLDS THE DATA
Try
PictureBox1.Load("www.kmoni.bosai.go.jp/data/map_img/RealTimeImg/jma_s/" + jTime_url + ".jma_s.gif")
Console.WriteLine("http://www.kmoni.bosai.go.jp/data/map_img/RealTimeImg/jma_s/" + jTime_url + ".jma_s.gif")
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
我在这里遇到的问题是我可能请求最新文件的速度太快,所以网络服务器总是报告“404 file not found”
。
尝试 2:我尝试将文件捕获延迟 4 秒。这在大多数情况下都有效。问题是从网络服务器获得的文件只在大部分时间有效,因为一旦“second”值达到 0
,输出的字符串将是 -4
而不是 56
。
第二个问题是整个代码有时会随机运行,只是返回错误 “404 file not found”
。
我尝试将 Urls 输出到控制台,然后在我的网络浏览器中查看这些在线图像,它们每次都运行良好。第三个问题是我需要将“秒”转换为 00
、01
、02
等输出。
Dim japanTime = System.TimeZoneInfo.ConvertTime(Now, TimeZoneInfo.FindSystemTimeZoneById("Tokyo Standard Time")) 'Convert user computer time to TokyoTime (japan)
'For debugging purposes only (not enabled)
' MessageBox.Show(japanTime.ToString())
'FORMAT OUTPUTTED: 1/19/2020 1:47:18 PM
'Needed format: yyyyMMdd/yyyyMMddHHmmss
Dim oldsecond As String = Convert.ToDateTime(japanTime.ToString()).ToString("ss") 'Create the old second to make a delay (source code not right)
' Dim oldminute As String = Convert.ToDateTime(japanTime.ToString()).ToString("mm")
'The -1 Explains the code delay
Dim newsecond As String = oldsecond - 5
Dim newnewsecond As String
If newsecond = -4 Then
newnewsecond = "56"
Else
If newsecond = -3 Then
newnewsecond = "57"
Else
If newsecond = -2 Then
newnewsecond = "58"
Else
If newsecond = -1 Then
newnewsecond = "59"
Else
If newsecond = 0 Then
newnewsecond = "00"
Else
newnewsecond = newsecond
End If
End If
End If
End If
End If
Label4.Text = newnewsecond
Dim jTime_url As String = Convert.ToDateTime(japanTime.ToString()).ToString("yyyyMMdd/yyyyMMddHHmm" & newnewsecond) 'Convert date to url that can be used in the Monitor url
Dim MyWebClient As New System.Net.WebClient
Try
PictureBox1.Load("www.kmoni.bosai.go.jp/data/map_img/RealTimeImg/jma_s/" + jTime_url + ".jma_s.gif")
Console.WriteLine("http://www.kmoni.bosai.go.jp/data/map_img/RealTimeImg/jma_s/" + jTime_url + ".jma_s.gif")
Catch ex as Exception
Console.Writeline(ex.message)
End Try
我在这里试图实现的是,我希望能够使用最新的日期信息显示此图像源 Url,替换 yyyyMMdd/yyyyMMddHHmmss
并将其显示在 PictureBox 中。
我的代码是否有错误,我可以改进它还是必须以其他方式、形状或形式重写它?
http://www.kmoni.bosai.go.jp/data/map_img/RealTimeImg/jma_s/yyyyMMdd/yyyyMMddHHmmss.jma_s.gif
您可以查看的示例网址图片来源:
http://www.kmoni.bosai.go.jp/data/map_img/RealTimeImg/jma_s/20200304/20200304081359.jma_s.gif
最佳答案
我更改了 DateTime 转换方法,使用 TimeZoneInfo.ConvertTimeBySystemTimeZoneId , 通过我的 Local TimeZone.Id和 "Tokyo Standard Time"
作为参数,生成一个 DateTimeOffset代表当前东京日期时间。
使用计时器,从计算的 DateTimeOffset 中减去 4 秒 (DateTimeOffset.AddSeconds(-4)
),图像被正确加载。
► 请注意,系统时钟必须与 NTP Server 同步. 4
秒是一个相对宽松的差距,但不同步的时钟当然会影响结果。
编辑:
将 System.Windows.Forms.Timer
更改为 System.Timers.Timer
,因为这里需要更多时间的是图片下载。
使用 BeginInvoke()
设置 PictureBox.Image
,这几乎不需要任何操作,可防止 UI 在窗体四处移动时断断续续。
Private tokyoTimer As System.Timers.Timer = Nothing
Private tokyoClient As WebClient
Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
tokyoTimer = New System.Timers.Timer() With {.Interval = 1000}
tokyoClient = New WebClient()
AddHandler tokyoTimer.Elapsed,
Sub()
Dim TokyoOffset = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(Date.Now, TimeZoneInfo.Local.Id, "Tokyo Standard Time")
Dim currentImage As String = TokyoOffset.AddSeconds(-4).ToString("yyyyMMdd/yyyyMMddHHmmss") & ".jma_s.gif"
Try
Dim data = tokyoClient.DownloadData(New Uri($"http://www.kmoni.bosai.go.jp/data/map_img/RealTimeImg/jma_s/{currentImage}"))
BeginInvoke(New MethodInvoker(
Sub()
PictureBox1.Image?.Dispose()
PictureBox1.Image = Image.FromStream(New MemoryStream(data))
End Sub))
Catch ex As Exception
' The exception hadling can be quite extensive here, since many factor can cause it:
' No server response, no Internet connection, internal server (500+) faults etc.
Console.WriteLine(ex.Message)
End Try
End Sub
tokyoTimer.Enabled = True
End Sub
Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
tokyoTimer.Enabled = False
tokyoTimer.Dispose()
tokyoClient?.Dispose()
End Sub
同一过程的异步版本,全部包含在一个类对象中。TokyoImagesDownloader
类公开了两个公共(public)方法:
▶ StartDownload()
期望作为参数:
404 - Not found
因为请求的图像尚未准备好。StopWatch
用于同步下载之间请求的时间间隔,考虑到下载和显示图像所需的时间,因此图像本身显示的时钟应该反射(reflect)请求的时间间隔。
▶ StopDownload()
可以随时调用以停止下载图像。
与:
StartDownload(PictureBox1, 1, 8)
该类被指示显示 PictureBox1
中的图像,每秒下载一张图像并将当前东京时间延迟 8 秒。
Dim imageDonwloder As TokyoImagesDownloader = Nothing
Private Sub btnStart_Click(sender As Object, e As EventArgs) Handles btnStart.Click
imageDonwloder = New TokyoImagesDownloader()
imageDonwloder.StartDownload(PictureBox1, 1, 8)
End Sub
Private Sub btnStop_Click(sender As Object, e As EventArgs) Handles btnStop.Click
imageDonwloder.StopDownload()
End Sub
Imports System.IO
Imports System.Net
Public Class TokyoImagesDownloader
Private tokyoClient As WebClient
Private cts As CancellationTokenSource = Nothing
Public Sub StartDownload(canvas As PictureBox, intervalSeconds As Integer, serverTimeDelaySeconds As Integer)
cts = New CancellationTokenSource()
tokyoClient = New WebClient()
Task.Run(Function() DownloadAsync(canvas, intervalSeconds, serverTimeDelaySeconds))
End Sub
Private Async Function DownloadAsync(canvas As PictureBox, intervalSeconds As Integer, serverTimeDelaySeconds As Integer) As Task
Dim downloadTimeWatch As Stopwatch = New Stopwatch()
downloadTimeWatch.Start()
Do
If cts.IsCancellationRequested Then Return
Dim TokyoOffset = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(Date.Now, TimeZoneInfo.Local.Id, "Tokyo Standard Time")
Dim currentImage As String = TokyoOffset.AddSeconds(-serverTimeDelaySeconds).ToString("yyyyMMdd/yyyyMMddHHmmss")
Dim url = New Uri($"http://www.kmoni.bosai.go.jp/data/map_img/RealTimeImg/jma_s/{currentImage}.jma_s.gif")
Try
Dim data = Await tokyoClient.DownloadDataTaskAsync(url)
canvas.BeginInvoke(New MethodInvoker(
Sub()
canvas.Image?.Dispose()
canvas.Image = Image.FromStream(New MemoryStream(data))
End Sub))
Await Task.Delay((intervalSeconds * 1000) - CInt(downloadTimeWatch.ElapsedMilliseconds))
downloadTimeWatch.Restart()
Catch wEx As WebException
Console.WriteLine(wEx.Message)
End Try
Loop
End Function
Public Sub StopDownload()
cts.Cancel()
tokyoClient?.CancelAsync()
tokyoClient?.Dispose()
cts?.Dispose()
End Sub
End Class
关于.net - 从 Internet 下载 URL 中包含特定日期时间的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60516917/
我的数据库中有两张表,一张用于 field ,另一张用于预订。我需要的是一个查询来选择所有未预订的 field 。见下文: 餐 table 预订具有以下字段: bk_id venue_id 作为(预订
嗨,我是编码新手,我有一些培训项目,其中包括从 HTML 表单输入 MySQL 数据库。它就像你玩过的游戏的日志。第一个日期输入是您开始游戏的时间,第二个日期输入是您完成游戏的时间。但我需要检查器或类
我是这个 sql 编码的新手,我正在尝试学习新的东西。因此,我创建了一个交货表,其中包含一些属性,如商品代码、交货日期、交货数量。所以如何从同一张表中获取第一个交货日期(最小日期)和交货数量以及最晚交
我从支付网关返回了这个日期 2014-05-15T08:40:52+01:00 我得到 2014-05-15T08:40:52 但我无法识别时区 +01:00 的含义 我的位置时区是 UTC−06:0
我快要疯了,请帮忙。 我有一列包含日期时间值。 我需要找到每天的最小值和最大值。 数据看起来像这样 2012-11-23 05:49:26.000 2012-11-23 07:55:43.000
我从 json 数据中获取日期为 2015 年 4 月 15 日晚上 10:15我只想在 html 页面中显示 json 响应数据的时间,例如 10:15 PM这里我放了我的js函数和html代码 J
是否有 javascript 库或其他机制允许我将 .NET 日期/时间格式字符串(即 yyyy-MM-dd HH:mm:ss)传递给 javascript函数并让它相应地解析提供的日期时间值?我一直
我正在使用以下代码以正确的格式获取当前的 UTC 时间,但客户返回并要求时间戳现在使用 EST 而不是 UTC。我搜索了 Google 和 stackoverflow,但找不到适用于我现有代码的答案。
我有以下日期的平均温度数据。我想找到连续至少 5 天低于或高于 0 摄氏度的开始日期。 date_short mean.temp 1 2018-05-18 17.54 2 2018-05-19
它可以在其他网络浏览器中使用,但 IE11 返回无效日期。 为了调试我使用了下面的代码。 console.log('before - ' + date.value); date.value = new
我在 Excel 中有一个数据的 Web 提取,其中日期列带有/Date(1388624400000)/。我需要在 Excel 中将其转换为日期。 最佳答案 能够从 here 中推断出它. 假设字符串
嗨,我的 Schmema 有一个带有 ISO 日期的字段: ISODate("2015-04-30T14:47:46.501Z") Paypal 在成功付款后以该形式返回日期对象: Time/Date
我的 table : CREATE TABLE `tbdata` ( `ID` INT(10) NOT NULL AUTO_INCREMENT, `PatientID` INT(10) NOT
我正在 Ubuntu 服务器 12.04 中编写一个 shell 脚本,它应该比较日志文件中的一些数据。在日志文件中,日期以以下格式给出: [Mon Apr 08 15:02:54 2013] 如您所
我想使用 GROUP BY WITH ROLLUP 创建一个表并获取总行数而不是 null。 $sql ="SELECT IF(YEAR(transaktioner.datum
我正在创建博客文章,在成功迁移我的博客文件后,当我转到我网站的博客页面时返回一个错误(无法解析其余部分:':“Ymd”'来自'post.date|date: "Ymd"') 我似乎无法确定这是语法错误
我正在尝试获取要插入到 CAML 查询中的月份范围,即:2010-09-01 和 2010-09-30。 我使用以下代码生成这两个值: var month = "10/2010"; var month
如何将代码document.write("直到指定日期")更改为writeMessage(date)中的日期?此外,writeMessage(date) 中的日期未正确显示(仅显示年份)。感谢您帮助解
我在 Windows (XP) 和 Linux 上都尝试过 utime()。在 Windows 上我得到一个 EACCES 错误,在 Linux 上我没有得到任何错误(但时间没有改变)。我的 utim
我正在尝试计算发生在同一日期的值的总和(在 XYZmin 中)。 我的数据看起来像这样, bar <- structure(list(date = structure(c(15622, 15622,
我是一名优秀的程序员,十分优秀!