かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

Azureで作ったDateTimeをSilverlightに渡すと・・・?

Azureは世界標準時なので日本から見ると9時間ずれた時間がとれるのは有名ですよね!んで、先日Silverlight側でDateTime.Nowしたらどうなるか試したところ、これはクライアントサイドで動いてるので日本の時間が取れました。

それでは、Azure側で作ったDateTimeをSilverlightに渡したら・・・?ということでやってみました。

こんな感じのDomainServiceを作ります。

namespace CloudSLApp.Web
{
    using System;
    using System.ComponentModel.DataAnnotations;
    using System.ServiceModel.DomainServices.Hosting;
    using System.ServiceModel.DomainServices.Server;

    [EnableClientAccess()]
    public class HelloDomainService : DomainService
    {
        public Person GetPerson()
        {
            // サーバーサイドでの時間を持ったオブジェクトを返す。
            return new Person();
        }
    }

    public class Person
    {
        public Person()
        {
            this.Birthday = DateTime.Now;
        }

        [Key]
        public int ID { get; set; }

        public DateTime Birthday { get; set; }
    }
}

Silverlight側はこんな感じ。

namespace CloudSLApp
{
    using System;
    using System.Linq;
    using System.Windows;
    using System.Windows.Controls;
    using CloudSLApp.Web;

    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("Hello world " + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
            var ctx = new HelloDomainContext();
            ctx.Load(
                ctx.GetPersonQuery(),
                lo =>
                {
                    var p = lo.Entities.First();
                    MessageBox.Show(p.Birthday.ToString("yyyy/MM/dd HH:mm:ss"));
                },
                null);
        }
    }
}

ローカル時間を表示したあと、DomainContextからPersonオブジェクトを取得してBirthdayプロパティを表示しています。さて、結果はどうなるか・・・?


上がローカルの時間で下がサーバー側での時間をSilverlightへ運んだ値です。どちらも、日本時間になってるくさい・・・。Azureから転送した時間は9時間ずれると思ったのに・・・。はてさて、DateTimeの動ききちんと調べないとはまりそうだ・・・。